2010-09-25 145 views
2

我正在使用一個管道和叉子的程序,並需要將寫入結束更改爲輸出文件。但是當我打開一個文件時,文件描述符是0,通常是stdin,但我認爲這是我的一些問題的原因。這是我的代碼爲什麼打開我的文件描述符0?

if (outputfd = open("file", O_RDWR | O_CREAT | O_TRUNC) == -1) 
{ 
    // open failed 
} 

有人可以讓我知道它爲什麼是0嗎?或者如何解決它?

回答

5

這是因爲你將它與-1進行比較。

outputfd沒有得到open的結果。它得到-1的檢查結果。

7

outputfd在您的代碼行中不是輸出文件描述符,而是等於FALSE(0)。這是因爲open返回的文件描述符是不是== -1

它應該閱讀:

outputfd = open("file", O_RDWR | O_CREAT | O_TRUNC); 
if (outputfd < 0) 
{ 
    // error handling code 
} 

還是應改爲:

if ((outputfd = open("file", O_RDWR | O_CREAT | O_TRUNC)) == -1) 
{ 
    // error handling code 
} 

注意,這需要3個額外的括號 - 一個右括號剩下兩個。

5

只是說明doron's answer

>> outputfd = open("file", O_RDWR | O_CREAT | O_TRUNC) == -1)

讓我們簡化:首先刪除錯誤,並添加額外的punctutation,使它看起來像一個實際的stement現在

outputfd = open("file", O_RDWR | O_CREAT | O_TRUNC) == -1; 

,有一個佔位符代替函數參數

outputfd = open(<PLACEHOLDER>) == -1; 

添加括號

outputfd = (open(<PLACEHOLDER>) == -1); 

open()-1的結果是什麼時候?操作失敗時。因此,讓我們假設操作沒有失敗,用一個正數

outputfd = (<POSITIVENUMBER> == -1); 

沒有正數都不能等於-1(不包括轉換的問題),所以,等價測試總是假取代公開..以及假,在C,通過定義,0

outputfd = 0; 
相關問題