[Android]Bionic C printf()流程

原创
2013/08/02 16:24
阅读数 1K

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])

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部