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