查找当前打开的文件句柄数(不是lsof)

在* NIX系统上,有没有办法find当前正在运行的进程中有多less个打开的文件句柄?

我正在寻找一个API或在C中使用的公式,从正在运行的过程中。

Solutions Collecting From Web of "查找当前打开的文件句柄数(不是lsof)"

在某些系统上(见下文),您可以在/ proc / [pid] / fd中对它们进行计数。 如果不是其中之一,请参阅: wallyk的答案 。

在c中,可以列出目录并计算总数,或列出目录内容:

#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
从贝尔实验室计划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实现了一个closefrom函数,它和你需要的东西非常相似,混合了wallyk和chown已经提出的两种方法,OpenSSH是非常便携的,至少在Unix / Linux / BSD / Cygwin系统之间。

没有可移植的方式来获取打开描述符的数量(不管类型),除非你自己跟踪它们。