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