![如何在 C 程序中使用 libprocps 获取打开的文件描述符/句柄](https://linux22.com/image/13750/%E5%A6%82%E4%BD%95%E5%9C%A8%20C%20%E7%A8%8B%E5%BA%8F%E4%B8%AD%E4%BD%BF%E7%94%A8%20libprocps%20%E8%8E%B7%E5%8F%96%E6%89%93%E5%BC%80%E7%9A%84%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6%2F%E5%8F%A5%E6%9F%84.png)
我正在尝试为我的物联网设备创建性能显示。该设备使用Linux,所以我想使用C程序以编程方式获取文件句柄的数量。目前我正在使用 libprocps API 来获取所有其他数据。现在我想获取整个物联网设备的打开文件描述符/句柄。
ls /proc/[pid]/fd |wc -l 给出文件数。但我需要从 C 程序中的任何 API 获取这些数据。哪个变量保存了proc中的fdinfo
答案1
您无法从 获取此信息libprocps
,但可以通过计算目录中的链接数量来获取每个进程的信息(这相当于您的ls /proc/[pid]/fd | wc -l
命令):
#include <dirent.h>
...
int fds = 0;
DIR * dirp;
struct dirent * entry;
dirp = opendir("/proc/.../fd"); /* You need to build the path */
while ((entry = readdir(dirp)) != NULL) {
if (entry->d_type == DT_LNK) {
fds++;
}
}
closedir(dirp);
您需要在上面添加错误处理。
如果您想获取分配的文件句柄的总数,请查看/proc/sys/fs/file-nr
:第一个数字是分配的文件句柄的数量。