如何防止socket()系统调用返回文件描述符0,1或2?

问题描述:

我对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. –

使用前请勿关闭标准输入,标准输出或标准错误socketpair()。如有必要,请为这些文件描述符打开/dev/null

当文件描述符被分配(任何系统调用 - open()socket()socketpair()accept()pipe()dup()等),使用的数量始终是最低的可用(未开封)数。如果您得到socketpair()分配的0,1或2,这意味着您必须关闭相应的描述符 - 但您为什么这样做?没关系;不要这样做。

或者通过打开/dev/null来修复它。请记住,0应该是可读的,1和2应该是可写的(并且如果0是可写的并且1和2是可读的,则无关紧要;实际上,当在终端中启动外壳时,所有三者通常可读且可写)。

+0

你说得对,我从来没有关闭STD *。问题在别的地方。 –