1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 在linux中查找运行程序句柄 如何查找我的进程在Linux中打开的文件句柄?

在linux中查找运行程序句柄 如何查找我的进程在Linux中打开的文件句柄?

时间:2020-02-20 20:10:51

相关推荐

在linux中查找运行程序句柄 如何查找我的进程在Linux中打开的文件句柄?

首先,您并不需要关心很多关于您不知道的打开的文件描述符。如果你知道你不会再写信给他们,关闭它们是一个好主意,并且不会伤害 - 毕竟你只是做了一个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--这可能会让事情变得混乱。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。