4

在 Jailed Linux 环境中,我想在 C 中获取当前用户态进程的文件描述符列表。

是否有系统调用来获取 fdt?

4

1 回答 1

1

我不知道有什么方法可以计算文件描述符的数量,但你可以作弊。

打开一个新的文件描述符并关闭它,记住你得到的 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;
}

我不知道如果你复制它们会产生副作用的任何文件描述符,但是那里总是有奇怪的野兽,所以使用风险自负。

于 2012-04-27T11:06:46.350 回答