如何防止 socket() 系统调用返回文件描述符 0,1 或 2?
How do I prevent socket() system call from returning file descriptor 0,1 or 2?
我正在使用 IPC 的 socketpair() 系统调用,它 returns 0,1 或 2 文件描述符(如果有的话)。使用 fd 0 的 write() 系统调用写入 STDIN,从而弄乱了我的应用程序的输出。我能做些什么来防止 socketpair() 返回 0,1 或 2 作为 fd 吗?
使用socketpair()
前不要关闭标准输入、标准输出或标准错误。如有必要,为这些文件描述符打开 /dev/null
。
分配文件描述符时(通过任何系统调用 — open()
、socket()
、socketpair()
、accept()
、pipe()
、dup()
, 等), 使用的号码总是最低的可用 (未打开) 号码。如果您得到由 socketpair()
分配的 0、1 或 2,则意味着您必须关闭相应的描述符 — 但您为什么要这样做?没关系;别这样。
或打开 /dev/null
修复它。请记住,0 应该是可读的,而 1 和 2 应该是可写的(并且 0 是否可写而 1 和 2 是否可读并不重要;实际上,当 shell 在终端中启动时,所有三个都是通常可读 和 可写)。
我正在使用 IPC 的 socketpair() 系统调用,它 returns 0,1 或 2 文件描述符(如果有的话)。使用 fd 0 的 write() 系统调用写入 STDIN,从而弄乱了我的应用程序的输出。我能做些什么来防止 socketpair() 返回 0,1 或 2 作为 fd 吗?
使用socketpair()
前不要关闭标准输入、标准输出或标准错误。如有必要,为这些文件描述符打开 /dev/null
。
分配文件描述符时(通过任何系统调用 — open()
、socket()
、socketpair()
、accept()
、pipe()
、dup()
, 等), 使用的号码总是最低的可用 (未打开) 号码。如果您得到由 socketpair()
分配的 0、1 或 2,则意味着您必须关闭相应的描述符 — 但您为什么要这样做?没关系;别这样。
或打开 /dev/null
修复它。请记住,0 应该是可读的,而 1 和 2 应该是可写的(并且 0 是否可写而 1 和 2 是否可读并不重要;实际上,当 shell 在终端中启动时,所有三个都是通常可读 和 可写)。