繁体   English   中英

如何在不调用lsof或分析/ proc / $ PID的情况下用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM