[Android]Bionic C printf()流程

本文详细解析了BionicC中printf()函数的输出流程。从printf()调用开始,依次经过vfprintf()、__vfprintf()等函数,最终通过__sfvwrite()完成实际的输出操作。此外,文章还提供了关键函数的源代码片段,帮助读者更好地理解整个输出过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Bionic C printf()输出的流程。 总体结构是写到已打开的标准输出的文件里。 注意不同于Android Log() 。

printf()-->vfprintf()-->__vfprintf()-->FLUSH()-->__sprint()-->__sfvwrite()

<!-- lang: cpp -->
int

printf(const char *fmt, ...) { int ret; va_list ap;

va_start(ap, fmt);
ret = vfprintf(stdout, fmt, ap);
va_end(ap);
return (ret);

}

int vfprintf(FILE *fp, const char *fmt0, __va_list ap) { int ret;

FLOCKFILE(fp);
ret = __vfprintf(fp, fmt0, ap);
FUNLOCKFILE(fp);
return (ret);

}

static int __sprint(FILE *fp, struct __suio *uio) { int err;

if (uio->uio_resid == 0) {
	uio->uio_iovcnt = 0;
	return (0);
}
err = __sfvwrite(fp, uio);
uio->uio_resid = 0;
uio->uio_iovcnt = 0;
return (err);

}

Stdio.h: extern FILE __sF[];

#define stdin (&__sF[0]) #define stdout (&__sF[1]) #define stderr (&__sF[2])

转载于:https://my.oschina.net/u/996206/blog/149509

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值