如何在 C 程序中使用 libprocps 获取打开的文件描述符/句柄

如何在 C 程序中使用 libprocps 获取打开的文件描述符/句柄

我正在尝试为我的物联网设备创建性能显示。该设备使用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:第一个数字是分配的文件句柄的数量。

相关内容