我试图实现自己的printf函数,当您尝试使用printf()
打印某些内容,然后尝试使用write()
打印其他内容时,我发现了这种奇怪的行为,输出是在输出write()
之前先打印printf()
!
如下面的示例所示:
#include <stdio.h>
#include <unistd.h>
int main()
{
printf(" hello world ");
write(1, "what am doing here", 18);
return (0);
}
这是上面代码的输出:
"what am doing here hello world "
在阅读了另一个问题的答案后,我发现
printf被缓冲,写入未被缓冲。
对于输出到终端,C stdio系统具有一项功能,只要它看到换行符'\ n',就刷新缓冲区。有关stdio缓冲的更多信息,请参阅setvbuf.a的文档
但是在我的情况下,'\n'
中没有新行printf()
,因此write()
的输出位于printf()
的输出之前。
例如,如果您使用与上面相同的代码,但在\n
中添加了printf()
,则输出将更改,而printf的输出将是第一个。
#include <stdio.h>
#include <unistd.h>
int main()
{
printf(" hello world\n"); //adding \n
write(1, "what am doing here", 18);
return (0);
}
这次的输出是不同的:
" hello world
what am doing here"
提示:来自在线编译器的此输出,但使用我使用的终端,其输出未更改,并且write()
的输出仍在printf()
的输出之前打印< / em>
如果我错了,请纠正我。