2010-04-14 28 views
1
int main () 
{ 
    char C[] = "Hello World"; 
    write(0,C,sizeof(C)); 
    return 0; 
} 

在上面的程序,我寫文件描述符ZERO,我想在默認情況下是STDIN。然後我爲什麼我在STDOUT獲得輸出?寫系統調用文件desciptor ZERO

[email protected]:~$ ./a.out 
Hello [email protected]:~$ 
+1

當你**寫入'stdin'時,你認爲應該發生什麼? – 2010-04-14 16:28:32

+0

不應該有任何輸出至少... – 2010-04-14 16:29:32

+0

爲了使輸出無處可去,描述符0引用的描述符必須具有輸入來自終端但輸出被丟棄的屬性。沒有這樣的機制存在,因爲這種機制沒有真正的用處。 – 2011-08-14 19:36:57

回答

7

標準輸入用於閱讀,而不是寫作。當您寫入標準輸入(或從標準輸出讀取)時,會發生什麼情況未指定。這裏,標準輸入和標準輸出都指向運行應用程序的僞終端,而終端仿真程序並沒有注意使'0'描述符爲「只讀」。因此,內核不會阻止寫入標準輸入,並且它會轉到僞終端,就像寫入標準輸出一樣。

爲便於攜帶,您不應該依賴這種行爲。

+0

很酷的答案!不知道這個! – 2010-07-30 15:27:38