输出有何不同?

时间:2013-10-05 19:19:10

标签: c unix

#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;
}

输出如何根据标准输出重定向到终端还是重定向到磁盘文件而有所不同?

3 个答案:

答案 0 :(得分:2)

我假设问题是“为什么打印到终端时输出与常规文件不同?”。当stdout是tty时,它通常是行缓冲的,因此printf调用write,因为你的输出包含换行符。当输出是常规文件时,输出是块缓冲的,因此c stdio库会延迟写入。在这种情况下,通过printf写入的数据直到主返回后才会写入,因此在您通过write写入的数据之后,数据会出现在输出中。

答案 1 :(得分:1)

不应该有所不同。这两个语句(printf和write)都写入stdout,因此写入终端。如果将其重定向到磁盘文件,它将只是相同的。

答案 2 :(得分:1)

冲洗可能略有不同。如果程序在关闭filedescriptor之前终止(prematurly),则该文件可能不包含所有输出,而使用换行符刷新输出到stdout。