Cプログラムでlibprocpsを使用して開かれたファイル記述子/ハンドルを取得する方法

Cプログラムでlibprocpsを使用して開かれたファイル記述子/ハンドルを取得する方法

IoTデバイス用のパフォーマンスディスプレイを作成しようとしています。デバイスはLinuxを使用しているので、Cプログラムを使用してプログラムでファイルハンドルの数を取得したいと思います。現在、私は他のすべてのデータを取得するためにlibprocps APIを使用しています。これで、IoTデバイス全体のオープンファイル記述子/ハンドルをインポートしたいと思います。

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:最初の数字は、割り当てられたファイルハンドルの数です。

関連情報