为什么write函数的输出在printf函数的输出之前?

时间:2019-12-02 00:58:09

标签: c printf output unistd.h

我试图实现自己的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 "

#edit

在阅读了另一个问题的答案后,我发现

  

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>

如果我错了,请纠正我。

0 个答案:

没有答案