为什么 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
.
这是代码:
#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
.