gpt4 book ai didi

c - 如何在 C 中列出进程的所有文件描述符,而无需调用 lsof 或解析/proc/$PID

转载 作者:IT王子 更新时间:2023-10-29 00:36:43 27 4
gpt4 key购买 nike

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

是否有获取 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;
}

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

关于c - 如何在 C 中列出进程的所有文件描述符,而无需调用 lsof 或解析/proc/$PID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10348591/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com