为什么 write() 在 printf() 之前执行?它不是按顺序排列的吗?

why write() executes before printf()? Is not it supposedly sequential?

这是代码:

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

void main(){
    char str1[18]= "moo[=10=] cuek\n";
    printf("lel: %s",str1);

    write(STDOUT_FILENO,str1,18);
    write(STDOUT_FILENO,"meow ",19);

}

输出为:

moo cuek
meow moo cuek
lel:moo

另外,为什么先打印meow然后打印moo cuek(第二行)

P.S。当我将 \n 放入 printf 中时,如:

printf("lel: %s \n",str1);

我得到:

lel:moo
moo cuek
meow moo cuek

为什么?!

我不知道细节,但基本上大多数写入控制台的函数都是缓冲的。这意味着您调用函数的时间不一定是打印文本的时间。 看: Why does printf not flush after the call unless a newline is in the format string?

这里

printf("lel: %s",str1);

printf() 在其指向的文件流上打印数据,默认情况下它是 stdout 流并且 stdout 流是行缓冲的,即您需要通过调用 [= 刷新缓冲区17=] 或添加 \n 字符。例如

printf("lel: %s",str1);
fflush(stdout);

printf("lel: %s\n",str1); /* newline char has another use apart from giving newline i.e clear the buffer */

或者您可以通过调用 setbuf().

来禁用缓冲

在这里

 write(STDOUT_FILENO,str1,18);

write() 是一个非缓冲 IO 的系统调用,即它不缓冲数据,因此它立即将数据写入 STDOUT_FILENO.