Linux

如何在 c 程序中使用 libprocps 獲取打開的文件描述符/句柄

  • March 29, 2021

我正在嘗試為我的 IOT 設備創建性能顯示。該設備使用 Linux,所以我想使用 C 程序以程式方式獲取文件句柄的數量。目前我正在使用 libprocps API 來獲取所有其他數據。現在我想獲取整個 IOT 設備的打開文件描述符/句柄。

ls /proc/

$$ pid $$/fd |wc -l 給出文件的數量。但是我需要來自 C 程序中的任何 API 的這些數據。哪個變數保存 proc 中的 fdinfo

您無法從 獲取此資訊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:第一個數字是分配的文件句柄的數量。

引用自:https://unix.stackexchange.com/questions/641189