6

* NIXシステムで、現在実行中のプロセスに開いているファイルハンドルがいくつあるかを確認する方法はありますか?

問題の実行中のプロセス内から、Cで使用するためのAPIまたは式を探しています。

4

4 に答える 4

6

特定のシステム(以下を参照)では、それらを/ proc / [pid]/fdでカウントできます。それらのいずれにも当てはまらない場合は、以下を参照してください:wallykの回答

cでは、dirをリストして合計をカウントするか、dirの内容をリストできます。

 #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;
 }

bashでは、次のようになります。

ls -l /proc/[pid]/fd/ | wc -l

procファイルシステムをサポートするオペレーティングシステムには、次のものが含まれますが、これらに限定されません
。Solaris
IRIX
Tru64 UNIX
BSD
Linux(プロセス関連以外のデータに拡張)
IBM AIX(互換性を向上させるためにLinuxに基づいて実装)
QNX
Plan 9 fromベル研究所

于 2011-11-17T07:55:47.253 に答える
6

*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);
于 2011-11-17T08:26:25.487 に答える
1

closefromOpenSSHは、wallyk と chown によって既に提案されている 2 つのアプローチを組み合わせる必要があるものと非常によく似た機能を実装しており、OpenSSH は、少なくとも Unix/Linux/BSD/Cygwin システム間で非常に移植性があります。

于 2011-11-17T10:35:13.513 に答える
0

自分で追跡しない限り、(タイプに関係なく)開いている記述子の数を取得する移植可能な方法はありません。

于 2011-11-17T08:00:49.910 に答える