[Android]Bionic C printf()流程

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

你可能感兴趣的:([Android]Bionic C printf()流程)