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

时间:2017-02-19 06:39:39

标签: c sockets unix-socket

我正在使用IPC的socketpair()系统调用,如果其中任何一个可用,则返回0,1或2个文件描述符。使用write()系统调用fd 0写入STDIN,从而弄乱了我的应用程序的输出。我能做些什么来阻止socketpair()以0或2返回fd?

1 个答案:

答案 0 :(得分:1)

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

分配文件描述符时(通过任何系统调用 - open()socket()socketpair()accept()pipe()dup(),等),使用的数字始终是最低可用(未打开)数字。如果您获得socketpair()分配的0,1或2,则表示您必须关闭相应的描述符 - 但为什么这样做?没关系;不要这样做。

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