我在調用fdopen
時遇到錯誤,它將errno
設置爲22.我正在使用exec命令調用子進程。孩子的文件描述符調用fdopen
4.第一個孩子的工作,並將數據發送回父和errno
爲0後父創建下一個子進程,fdopen(4, "w");
再次被調用時errno
設置爲22Errno 22在調用fdopen()後
從我讀過的內容來看,errno
對於fdopen()
可能意味着模式參數不正確。我也讀過它可能是從fnctl
錯誤,這可能意味着一個錯誤的文件描述符。我指定文件描述符4,它在第一個子進程上工作。那麼爲什麼errno
被設置爲22,當我嘗試創建另一個FILE*
?
我不明白什麼時候它適用於一個子進程,但不是下一個。任何人都可以爲我闡明這一點嗎?
下面是代碼:
int main(int argc, char* argv[])
{
cout << "Child " << argv[argc-1] << " starting" << endl;
//close(3);
if(argc < 1) fatal("Not enough arguments provided to ChildMain");
int id = atoi(argv[argc-1]);
//Child kid((int) *argv[1]);
cout << "Error before fdopen(): " << errno << endl;
FILE* out = fdopen(4, "w");
if(out == NULL)
{
cout << "Child ID: " << id << endl;
cout << "\tError: " << errno << endl << endl;
}
int ret = fprintf(out, "%d", id);
fflush(out);
return 0;
}
您還應該顯示'strerror(errno)' –
因爲父進程(或甚至是父進程)可能已經使用了它,所以您不應該在「4」中進行連線。你應該明確地傳送'pipe'系統調用給出的文件描述符。只有文件描述符0(標準輸入),1(標準輸出)和2(標準錯誤)是固定的。 –