我正在使用一個管道和叉子的程序,並需要將寫入結束更改爲輸出文件。但是當我打開一個文件時,文件描述符是0,通常是stdin,但我認爲這是我的一些問題的原因。這是我的代碼爲什麼打開我的文件描述符0?
if (outputfd = open("file", O_RDWR | O_CREAT | O_TRUNC) == -1)
{
// open failed
}
有人可以讓我知道它爲什麼是0嗎?或者如何解決它?
我正在使用一個管道和叉子的程序,並需要將寫入結束更改爲輸出文件。但是當我打開一個文件時,文件描述符是0,通常是stdin,但我認爲這是我的一些問題的原因。這是我的代碼爲什麼打開我的文件描述符0?
if (outputfd = open("file", O_RDWR | O_CREAT | O_TRUNC) == -1)
{
// open failed
}
有人可以讓我知道它爲什麼是0嗎?或者如何解決它?
這是因爲你將它與-1
進行比較。
outputfd
沒有得到open
的結果。它得到-1
的檢查結果。
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個額外的括號 - 一個右括號剩下兩個。
只是說明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;
C,關係運算符具有比higher precedence賦值運算符。