2013-10-05 24 views
-2
#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

恩,如果輸出重定向到終端,它將被重定向到終端,如果它被重定向到磁盤上的文件,它將被重定向到磁盤上的文件。我認爲這很明顯。 – rightfold

+1

爲什麼你還沒有包含'unistd.h'? – haccks

+0

任何錯誤'FILE * f = fopen(「myfile.txt」,「a」); fprintf(f,「我會給你寫一封短信。\ n」);'? – LihO

回答

1

它應該沒有區別。這兩個語句(printf以及write)都寫入stdout,因此寫入終端。如果將其重定向到磁盤文件,它將只是相同的。

1

可能會有輕微的差異與沖洗。如果程序在關閉filedescriptor之前終止(prematurly),則文件可能不包含所有輸出,而輸出到stdout的文件會使用換行符刷新。

2

我假設問題是「爲什麼打印到終端的輸出不同於普通文件?」。當stdout是一個tty時,它通常是行緩衝的,所以printf會調用write,因爲你的輸出包含一個換行符。當輸出是常規文件時,輸出會被塊緩衝,所以c stdio庫會延遲寫入。在這種情況下,通過printf寫入的數據直到主返回後才寫入,這樣在通過write寫入的數據之後,數據就會出現在輸出中。