我写了以下编程:
int main()
{
printf("one\n");
write(1, "two\n", 4);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后我发出命令./a.out | 猫在终端输出到两个而不是一个两个为什么???
hek*_*mgl 11
这是因为printf输出将被缓冲libc,write输出将不会被缓冲.它是对文件(stdout)的直接,无缓冲操作
阅读本文:
如果stdout是终端,则缓冲自动设置为行缓冲,否则设置为缓冲
所以,你实际上是在管道cat- 这就是为什么启用缓冲(尝试不cat看)
要关闭缓冲,请发出以下stdbuf命令:
stdbuf -o0 ./a.out | cat
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这对于一个不是每天都是C黑客的人来说是一个非常好的问题!简单而具有描述性!
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |