![](/img/trans.png)
[英]How to restart or start a process with closing all file descriptors in C
[英]How to list all file descriptors of a process in C, without calling lsof or parsing /proc/$PID
在Jailed Linux环境中,我想获取C中当前userland进程的文件描述符列表。
是否有获取fdt的系统调用?
我不知道有什么方法可以获取文件描述符的数量,但您可能会作弊。
打开一个新的文件描述符并关闭它,记住您得到的fd号。
从0到最大的fd可以打开(您可以使用getdtablesize()获得此数字)dup2将每个文件描述符保存到已保存的fd中。 那些不返回错误的控件将打开,其余的将关闭。
作为一个简化的示例,只计算它们:
int
count_fds(void)
{
int maxfd = getdtablesize();
int openfds;
int fd;
int i;
openfds = 0;
if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
return maxfd;
close(fd);
for (i = 0; i < maxfd; i++) {
if (dup2(i, fd) != -1) {
openfds++;
close(fd);
}
}
return openfds;
}
如果您将它们复制,我还不知道会产生副作用的任何文件描述符,但是总是有奇怪的野兽出现,因此使用风险自负。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.