C 为什么write()在printf()之前执行?它不是按顺序排列的吗?
代码如下:C 为什么write()在printf()之前执行?它不是按顺序排列的吗?,c,printf,sequential,C,Printf,Sequential,代码如下: #include <stdio.h> #include <unistd.h> void main(){ char str1[18]= "moo\0 cuek\n"; printf("lel: %s",str1); write(STDOUT_FILENO,str1,18); write(STDOUT_FILENO,"meow ",19); } 还有,为什么先印“喵喵”,然后再印第二行 当我将\n放入printf中时,请注意
#include <stdio.h>
#include <unistd.h>
void main(){
char str1[18]= "moo\0 cuek\n";
printf("lel: %s",str1);
write(STDOUT_FILENO,str1,18);
write(STDOUT_FILENO,"meow ",19);
}
还有,为什么先印“喵喵”,然后再印第二行
当我将\n放入printf中时,请注意:
printf("lel: %s \n",str1);
我得到:
lel:moo
moo cuek
meow moo cuek
为什么 我不知道细节,但基本上大多数写入控制台的函数都是缓冲的。这意味着当您调用函数时,文本打印时并不一定是这样。 见: 这里
printf("lel: %s",str1);
printf在文件流上打印数据,其中它的点和默认值是stdout stream,stdout stream是行缓冲的,即您需要通过调用fflushstdoutor adding\n char来刷新缓冲区。例如
printf("lel: %s",str1);
fflush(stdout);
或
或者可以通过调用setbuf禁用缓冲
在这里
write(STDOUT_FILENO,str1,18);
write是一个没有缓冲IO的系统调用,即它不缓冲数据,因此它会立即将数据写入标准输出文件号。提示:什么是“缓冲IO”?
printf("lel: %s\n",str1); /* newline char has another use apart from giving newline i.e clear the buffer */
write(STDOUT_FILENO,str1,18);