gpt4 book ai didi

Linux 实现打开文件描述符 C

转载 作者:太空狗 更新时间:2023-10-29 12:14:40 26 4
gpt4 key购买 nike

1) 除了循环 /proc 以获得打开的文件描述符的总数之外,是否还有其他选择?我使用了以下目录:

/proc/PID/fd/* 
/proc/PID/maps
/proc/PID/cwd
/proc/PID/root
/proc/PID/exe

2) 数字与lsof | 不同wc -lcat/proc/sys/fs/file-nr

3) 加载的动态链接库和当前工作目录可以算作打开文件描述符吗?在 C 中为 Linux 实现所有打开的文件描述符

最佳答案

如何计算取决于您对哪些信息感兴趣。

查看 /proc/PID/fd/* 将为您提供打开的文件描述符的数量。但是,需要注意的是,两个进程实际上可能共享一个文件描述符,如果您进行 fork ,则子进程会从其父进程继承文件描述符,然后此方法将计算两次,每个进程一次。

/proc/PID/maps 将向您显示进程的内存映射,它可以包括加载的可执行文件本身和动态链接库,但也包括与文件不对应的东西,如堆、栈、vdso 部分(内核导出的虚拟共享对象)等。

lsof 将列出可以使用文件的各种方式,其中不仅包括文件描述符;它还包括可执行文件和共享库,但不包括与 /proc/PID/maps 中显示的文件不对应的内存区域,如堆栈、堆、vdso 节等

/proc/sys/fs/file-nr 将报告打开的内核文件句柄数。内核文件句柄不同于文件描述符;可以打开多个指向同一文件句柄的文件描述符,例如,通过调用 dupdup2

这些差异解释了为什么您会通过这些不同的计数方式得到不同的数字。问题是,您使用此计数的目的是什么?这将有助于回答您实际应该使用哪种计数方式。

关于Linux 实现打开文件描述符 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29922732/

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