网站专题页面开发,什么是电子商务网站建设的基本要求,人工智能搭建,郴州网络推广案例首先#xff0c;您并不需要关心很多关于您不知道的打开的文件描述符。如果你知道你不会再写信给他们#xff0c;关闭它们是一个好主意#xff0c;并且不会伤害 - 毕竟你只是做了一个fork()#xff0c;这个fds打开了两次。但是同样#xff0c;如果你让他们开放#xff0c;…首先您并不需要关心很多关于您不知道的打开的文件描述符。如果你知道你不会再写信给他们关闭它们是一个好主意并且不会伤害 - 毕竟你只是做了一个fork()这个fds打开了两次。但是同样如果你让他们开放他们也不会打扰你 - 毕竟你不知道他们你大概不会随机写给他们。至于你的第三方库会做什么这有点夸张。有些人可能不希望遇到fork()的情况最终可能会意外地从两个进程写入同一个fd而没有进行任何同步。其他人可能不希望让你关闭他们的fds。你必须检查。这就是为什么在库中随机打开一个文件描述符并且不给调用者进行管理是一个坏主意。这么说本着回答原问题的精神没有一个特别好的方法。您可以在文件描述符上调用dup()或dup2();如果关闭该呼叫将以EBADF失败。所以你可以说int newfd dup(oldfd);if (newfd 0){close(newfd);close(oldfd);}但在这一点上你只是作为小康说摆在首位close(oldfd)和忽略任何EBADFs。假设您仍然想要关闭所有内容的核选项则需要找到可能的最大打开文件描述符数。假设1至65,535不是一个好主意。首先当然fds从0开始但也没有定义特定的上限。为了便于携带POSIX的sysconf(_SC_OPEN_MAX)应该在任何理想的POSIX系统上告诉你尽管严格来说它是可选的。如果你感到偏执狂请检查返回值为-1但此时你大多不得不退回硬编码值(1024应该没问题除非你做的事很奇怪)。或者如果您对Linux特定的版本没有问题您可以在/ proc中进行挖掘。不要忘了关闭fds 0,1和2--这可能会让事情变得混乱。