#include <stdio.h>
int main()
{
printf("If I had more time, \n");
write(STDOUT_FILENO, "I would have written you a shorter letter.\n", 43);
return 0;
}
根据标准输出是重定向到终端还是磁盘文件,输出有何不同?
我假设问题是“为什么打印到终端时的输出与普通文件不同?”。当 stdout 是 tty 时,它通常是行缓冲的,因此 printf 调用 write 因为您的输出包含换行符。当输出是常规文件时,输出是块缓冲的,因此 c stdio 库会延迟写入。在这种情况下,通过 printf 写入的数据要等到 main 返回之后才会写入,因此数据会在您通过 写入的数据之后出现在输出中write
。
它不应该不同。两个语句(printf 和 write)都写入标准输出,因此写入终端。如果你将它重定向到一个磁盘文件,它只会是一样的。
冲洗可能会略有不同。如果程序在关闭文件描述符之前(过早地)终止,则文件可能不包含所有输出,而到 stdout 的输出会用换行符刷新。