GNU/Linux >> Linux の 問題 >  >> Linux

Cコードから現在使用されているファイル記述子の数を取得する

現在のプロセス数については、 getrlimit を使用できます ファイル記述子の制限を取得するには、0 からその制限までのすべての整数を繰り返し、fcntl を呼び出してみてください F_GETFD で 指図。実際に開いているファイル記述子でのみ成功し、それらを数えることができます。

編集: 私は今、それを行うためのより良い方法を持っています。 rlimit を取得した後 、 struct pollfd の大きな配列を作成します (可能であれば制限と同じ大きさ。それ以外の場合は、複数の実行/呼び出しに分割できます)範囲内の各 fd と events メンバーを 0 に設定します。poll を呼び出します。 タイムアウトが 0 のアレイで、POLLNVAL を探します。 revents のフラグ メンバーごとに。これにより、fd ごとに 1 つの syscall ではなく、1 つの syscall で潜在的に巨大な fd のセットのどれが無効であるかがわかります。


/proc/sys/fs/file-nr を読むことができます 割り当てられたファイル システム ハンドルと空きファイル システム ハンドルの合計数と、許可されている最大数を確認します。

[[email protected] proc]# cat /proc/sys/fs/file-nr
3853    908     53182
|       |       |
|       |       |
|       |       max: maximum open file descriptors
|       free: total free allocated file descriptors
allocated: total allocated file descriptors since boot

現在使用されている数を計算するには、単に allocated - free を実行します . ((allocated - free) / max) * 100 を実行して、使用された記述子の割合を計算することもできます

プロセスごとについては、プログラムで実行できる方法がわかりません。

lsof でそれを行う方法のチュートリアルは次のとおりです。 とにかく:http://linuxshellaccount.blogspot.com/2008/06/finding-number-of-open-file-descriptors.html


Linux を使用しているとのことなので、フォルダー /proc/self/fd/ を開くことができます。 開いているすべてのファイル記述子へのシンボリック リンクを含む必要があります .


Linux
  1. スクリプトから正しい終了コードを取得できませんか?

  2. トリプルバックティックフェンスコードブロック「`マークダウンファイルからの抜粋を抽出しますか?

  3. ファイルの行数を数えますか?

  1. ファイルからGrepパターンを読み取る?

  2. ログが大きくなりすぎるのを防ぐ方法は?

  3. Linuxのファイルから行、単語、文字を数える

  1. ターミナルウィンドウからLinuxでファイルを作成するには?

  2. Javaを使用してLinux環境からTomcatの現在のディレクトリの相対パスを取得する方法

  3. CからLinuxで現在のファイル(pwd)へのパスを取得する方法は?