2017-02-19 63 views
-1

我對IPC使用socketpair()系統調用,如果它們中的任何一個可用,它將返回0,1或2個文件描述符。使用write()系統調用fd 0寫入STDIN,從而搞亂了我的應用程序的輸出。有什麼我可以做,以防止socketpair()返回0,1或2作爲FD?如何防止socket()系統調用返回文件描述符0,1或2?

+2

對FD使用'write()'0寫0,否則連接到0。如果它是一個套接字,它不是'stdin',它不能'搞亂你的應用程序的輸出'。目前尚不清楚您是否有需要解決的問題。 – EJP

+1

socketpair的返回值是** not **文件描述符,它是一個狀態碼(-1或0),表示失敗或成功。 – wildplasser

+0

我的不好,我的意思是說,套接字分配的文件描述符0,1或2. –

回答

1

使用前請勿關閉標準輸入,標準輸出或標準錯誤socketpair()。如有必要,請爲這些文件描述符打開/dev/null

當文件描述符被分配(任何系統調用 - open()socket()socketpair()accept()pipe()dup()等),使用的數量始終是最低的可用(未開封)數。如果您得到socketpair()分配的0,1或2,這意味着您必須關閉相應的描述符 - 但您爲什麼這樣做?沒關係;不要這樣做。

或者通過打開/dev/null來修復它。請記住,0應該是可讀的,1和2應該是可寫的(並且如果0是可寫的並且1和2是可讀的,則無關緊要;實際上,當在終端中啓動外殼時,所有三者通常可讀且可寫)。

+0

你說得對,我從來沒有關閉STD *。問題在別的地方。 –

相關問題