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