0

代码:

#include <stdio.h>
#include <unistd.h>

int main(void)
{
    char buf[BUFSIZ];
    int n;

    while((n = read(0, buf, BUFSIZ)) > 0 && printf("1:%d ", n))
    {
        printf("2:%d ", n);
        write(1, buf, n);
    }

    return 0;
}

pupu(my input)
pupu(output)
popopo(my input)
popopo(output)
1:5 2:5 1:7 2:7(output)

我的问题:它是如何工作的?

(为什么在 n_read 之前缓冲文本输出?)

4

1 回答 1

1

标准 I/O 函数(如printf)是缓冲stdout的,这意味着直到其缓冲区已满或显式刷新后才会打印输出。

另一方面,直接写入输出文件描述符不会被缓冲,而是直接写入。

您在这里所拥有的是混合直接输出和缓冲输出,并且在程序退出并刷新缓冲区之前,实际上不会写入缓冲输出。

于 2013-05-26T13:13:21.523 回答