Bionic C printf()輸出的流程。 整體結構是寫到已打開的標準輸出的文件裏。 注意不一樣於Android Log() 。ionic
printf()-->vfprintf()-->__vfprintf()-->FLUSH()-->__sprint()-->__sfvwrite()ui
<!-- lang: cpp --> int
printf(const char *fmt, ...) { int ret; va_list ap;code
va_start(ap, fmt); ret = vfprintf(stdout, fmt, ap); va_end(ap); return (ret);
}it
int vfprintf(FILE *fp, const char *fmt0, __va_list ap) { int ret;io
FLOCKFILE(fp); ret = __vfprintf(fp, fmt0, ap); FUNLOCKFILE(fp); return (ret);
}static
static int __sprint(FILE *fp, struct __suio *uio) { int err;di
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[];co
#define stdin (&__sF[0]) #define stdout (&__sF[1]) #define stderr (&__sF[2])return