在Jailed
Linux环境中,我想在C中获取当前用户空间进程的文件描述符列表.
是否有一个系统调用来获取fdt?
最佳答案 我不知道有任何方法来获取文件描述符,但你可以作弊.
打开一个新的文件描述符并关闭它,记住你得到的fd号码.
从0开始到最大的fd你可以打开(你可以用getdtablesize()获取这个数字)dup2每个filedescriptor到保存的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;
}
我不知道任何文件描述符可能有副作用,如果你复制它们,但总有奇怪的野兽,所以使用风险自负.