我正在对IPC使用socketpair()系统调用,如果其中任何一个可用,它将返回0,1或2文件描述符。使用write()系统调用将fd 0写入STDIN,从而弄乱了我的应用程序的输出。我可以做些什么来防止socketpair()以fd返回0,1或2吗?
最佳答案
在使用socketpair()
之前,请勿关闭标准输入,标准输出或标准错误。如有必要,请为这些文件描述符打开/dev/null
。
分配文件描述符后(通过任何系统调用-open()
,socket()
,socketpair()
,accept()
,pipe()
,dup()
等),使用的数字始终是最低的可用(未打开)数字。如果要获取socketpair()
分配的0、1或2,则意味着您必须关闭相应的描述符-但是为什么要这样做呢?没关系;不要做
或通过打开/dev/null
对其进行修复。请记住,0应该是可读的,而1和2应该是可写的(并且0是否可写并且1和2是可读的并不重要;实际上,当在终端中启动shell时,所有这三个通常都是可读和可写的)。