Linux 实现打开文件描述符 C

标签 linux

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

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

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

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

最佳答案

如何计算取决于您感兴趣的信息。

浏览/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/

相关文章:

linux - 运行 Linux 内核模块 (Hello World)

c++ - Linux c++ 控制台获取关键状态

linux - 在终端上显示输出并将最后 10 行添加到日志文件

linux - bash 脚本中的时间性能增强

linux - Ssh端口转发谷歌计算引擎

python - 在不运行测试的情况下制作(从源代码安装)python

c++ - 将两个线程设置为相同的 cpu 关联 pthread_getaffinity_np

linux - Ubuntu 中打开终端(shell)时执行哪些启动脚本

linux - Ubuntu : "Can' t load driver file apr_dbd_oracle. 上的 Apache 2.4 所以”

python - 按值对字典排序