オン* NIXシステムでは、現在実行中のプロセスで開いているファイルハンドルの数を調べる方法はありますか?現在オープンしているファイルハンドルの数(lsofでない)
問題の実行中のプロセスからCで使用するAPIまたは数式を探しています。
オン* NIXシステムでは、現在実行中のプロセスで開いているファイルハンドルの数を調べる方法はありますか?現在オープンしているファイルハンドルの数(lsofでない)
問題の実行中のプロセスからCで使用するAPIまたは数式を探しています。
特定のシステム(下記参照)では、/ proc/[pid]/fdで数えられます。そのうちの1つに該当しない場合は、wallyk's answerを参照してください。 C言語で
、あなたはディレクトリの一覧を表示し、合計を数え、またはディレクトリの内容一覧表示することができます。bashで
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int
main (void)
{
DIR *dp;
struct dirent *ep;
dp = opendir ("/proc/MYPID/fd/");
if (dp != NULL)
{
while (ep = readdir (dp))
puts (ep->d_name);
(void) closedir (dp);
}
else
perror ("Couldn't open the directory");
return 0;
}
を、のようなもの:サポート
ls -l /proc/[pid]/fd/ | wc -l
オペレーティング・システムprocファイルシステムが含まれますが、 に限定されません。
Solaris
IRIX
ベル研究所からのTru64 UNIX
(非プロセス関連データにを拡張) BSD
のLinux(互換性を向上させるためにLinux上で実装を塩基)
IBM AIX
QNX
プラン9
あなた自身を追跡しない限り、オープンディスクリプタの数を取得する方法(タイプに関係なく)は、ポータブルです。
任意の* nixのシステム上で動作するはずです頭に浮かぶアイデアがある:
int j, n = 0;
// count open file descriptors
for (j = 0; j < FDMAX; ++j) // FDMAX should be retrieved from process limits,
// but a constant value of >=4K should be
// adequate for most systems
{
int fd = dup (j);
if (fd < 0)
continue;
++n;
close (fd);
}
printf ("%d file descriptors open\n", n);
OpenSSHはすでにwallykによって提案された二つのアプローチを混合し、必要なものと非常によく似た何かをするclosefrom
機能を実装OpenSSHは、少なくともUnix/Linux/BSD/Cygwinシステム間で移植性があります。
FreeBSDシステムには/ proc /ファイルシステムがありません。また、これはOPの質問には答えません。 – arne
私はwallykの答えが気に入っていました。これは移植性が高く、サブシステムによって提供されるほとんどの機能に依存しています。しかし、私の場合は、ファイルハンドルをカウントする試みが成功する可能性が高いことを確認する必要があります。すなわち、より多くのファイルハンドルを開閉する必要がない。その意味では、chownのソリューションは、作業に1つだけ多くのファイルハンドルを使用するため、優れています。 –
@CodeMedic:wallykソリューションは、ループ内で開いたり閉じたりするときに、いつでも追加のファイルハンドラを1つだけ要求します。 – salva