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

我试图实现自己的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,18);

     return (0);
}

这次的输出是不同的:

" hello world what am doing here"

提示:来自在线编译器的此输出,但使用我使用的终端,其输出未更改,并且write()的输出仍在printf()的输出之前打印

如果我错了,请纠正我。

a198911 回答:为什么write函数的输出在printf函数的输出之前?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2996489.html

大家都在问