我對IPC使用socketpair()系統調用,如果它們中的任何一個可用,它將返回0,1或2個文件描述符。使用write()系統調用fd 0寫入STDIN,從而搞亂了我的應用程序的輸出。有什麼我可以做,以防止socketpair()返回0,1或2作爲FD?如何防止socket()系統調用返回文件描述符0,1或2?
-1
A
回答
1
使用前請勿關閉標準輸入,標準輸出或標準錯誤socketpair()
。如有必要,請爲這些文件描述符打開/dev/null
。
當文件描述符被分配(任何系統調用 - open()
,socket()
,socketpair()
,accept()
,pipe()
,dup()
等),使用的數量始終是最低的可用(未開封)數。如果您得到socketpair()
分配的0,1或2,這意味着您必須關閉相應的描述符 - 但您爲什麼這樣做?沒關係;不要這樣做。
或者通過打開/dev/null
來修復它。請記住,0應該是可讀的,1和2應該是可寫的(並且如果0是可寫的並且1和2是可讀的,則無關緊要;實際上,當在終端中啓動外殼時,所有三者通常可讀且和可寫)。
+0
你說得對,我從來沒有關閉STD *。問題在別的地方。 –
相關問題
- 1. 文件描述符和系統調用
- 2. 防止文件描述符對POSIX系統閉合
- 3. 如何重新打開文件描述符0,1和2?
- 4. SOCKET文件描述
- 5. 使用文件描述符從空調系統調用
- 6. 文件描述符表和系統調用
- 7. C(文件描述符)中的系統調用
- 8. Linux Socket文件描述符與線程
- 9. .Net Socket編程:文件描述符
- 10. 文件描述符返回錯誤值
- 11. 文件描述符,打開()返回零
- 12. 系統調用如何知道文件描述符屬於哪個進程?
- 13. 用文件描述符調用dlopen?
- 14. 調用fdopendir()破壞文件描述符
- 15. 調用fdopen:壞的文件描述符
- 16. 保留文件描述符,以防止FD耗盡
- 17. 防止子進程繼承文件描述符
- 18. 將內存映射到文件描述符(反向mmap)的系統調用?
- 19. 是否需要文件描述符控制程序/系統調用?
- 20. 系統調用返回「沒有這樣的文件或目錄」
- 21. 無法打開文件,文件描述符返回-1值
- 22. POSIX POLLOUT和阻止文件描述符
- 23. 打開並獲取系統文件描述符
- 24. fstat - freebsd系統上的文件描述符總數?
- 25. Linux系統:檢查是否文件描述符可以讀取
- 26. 文件描述符和進程關係
- 27. 使用Android從Parcel文件描述符返回輸入流DownloadManager
- 28. 如何從Maven Assembly插件的另一個描述符中調用描述符?
- 29. 文件描述符飢餓和阻斷文件描述符
- 30. Epoll_wait在關閉的文件描述符上返回事件
對FD使用'write()'0寫0,否則連接到0。如果它是一個套接字,它不是'stdin',它不能'搞亂你的應用程序的輸出'。目前尚不清楚您是否有需要解決的問題。 – EJP
socketpair的返回值是** not **文件描述符,它是一個狀態碼(-1或0),表示失敗或成功。 – wildplasser
我的不好,我的意思是說,套接字分配的文件描述符0,1或2. –