相同的代码,不同 C 编译器中 printf() 和 write() 的不同打印顺序
same code, different printing order with printf() and write() in different C compilers
编辑:我简化了原始代码。
密码是:
#include <stdio.h>
#include <unistd.h>
int main(void)
{
printf("printf1\n");
write(1, "1 should be after printf\n", 25);
printf("printf2\n");
write(1, "2 should be after printf\n", 25);
return 0;
}
Ideone 的意外结果:
1 should be after printf
2 should be after printf
printf1
printf2
的预期结果
printf1
1 should be after printf
printf2
2 should be after printf
为什么输出顺序不同?
这里 printf 等待缓冲区满,而 write 不这样做。如果您的 printf 末尾有一个 \n(换行符),那么它会在遇到 \n 时立即调用 write。请注意,一旦缓冲区已满,print 也会调用 write。 write 只会将给定数量的字节输出到终端,因此会更快。
试试你的代码:
printf("i = %d\n", i);
ft_putstr("should be printed right after printf\n");
编辑:我简化了原始代码。
密码是:
#include <stdio.h>
#include <unistd.h>
int main(void)
{
printf("printf1\n");
write(1, "1 should be after printf\n", 25);
printf("printf2\n");
write(1, "2 should be after printf\n", 25);
return 0;
}
Ideone 的意外结果:
1 should be after printf
2 should be after printf
printf1
printf2
的预期结果
printf1
1 should be after printf
printf2
2 should be after printf
为什么输出顺序不同?
这里 printf 等待缓冲区满,而 write 不这样做。如果您的 printf 末尾有一个 \n(换行符),那么它会在遇到 \n 时立即调用 write。请注意,一旦缓冲区已满,print 也会调用 write。 write 只会将给定数量的字节输出到终端,因此会更快。
试试你的代码:
printf("i = %d\n", i);
ft_putstr("should be printed right after printf\n");