6
A
回答
6
在某些系统上(见下文),您可以在/ proc/[pid]/fd中对它们进行计数。如果不是其中之一,请参阅:wallyk's answer。
在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
计划9操作系统支持proc文件系统包括但不限于:
Solaris
IRIX
Tru64 UNIX的
BSD
Linux操作系统(其延伸到非处理相关的数据)
IBM AIX(这立足于Linux的其实施,提高的相容性)
QNX
贝尔实验室
0
没有便携式获取打开描述符的数量(不管类型)的方式,除非您自己跟踪它们。
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);
1
的OpenSSH实现closefrom
功能确实非常相似的东西,你需要已经wallyk提出的两种方法混合什么, chown,而OpenSSH是非常便携的,至少在Unix/Linux/BSD/Cygwin系统之间。
相关问题
- 1. 列出当前打开的所有文件句柄?
- 2. 如何查看类似“lsof -l”的文件句柄?
- 3. 使用lsof查找单个打开文件的最快方法是什么?
- 4. lsof的文件描述符被打开
- 5. 打开文件句柄时出错
- 6. File.ReadAllBytes保持文件句柄打开
- 7. 在Windows DLL中,如何获取当前进程已打开的文件句柄?
- 8. 在Eclipse插件中查找当前打开的文件
- 9. 如何查找我的进程在Linux中打开的文件句柄?
- 10. 无法打开的句柄
- 11. JSON-RPC和当前文档的句柄
- 12. 红宝石文件句柄管理(打开的文件太多)
- 13. 是否已使用FILE_FLAG_SEQUENTIAL_SCAN标志打开文件句柄?
- 14. 在打开文件之前知道文件当前是否已打开?
- 15. 在PHP中打开文件句柄的开销成本?
- 16. 如何查找并关闭可移动驱动器上所有打开的文件句柄(弹出之前)
- 17. 写文件(句柄)的内容,以不同的文件句柄
- 18. 如何检查Java程序是否保持打开文件句柄?
- 19. 检查特定文件当前是否打开
- 20. 如何检查文件当前是否打开
- 21. 检查matlab句柄是否是数字句柄
- 22. 打开的文本文件不在MATLAB当前文件夹中
- 23. 检查句柄是否属于当前进程?
- 24. 获取的当前打开的文件
- 25. ADOX留下的文件句柄开放
- 26. GlassfishESB filebc组件导致太多打开文件句柄
- 27. 如何测试csv文件当前是否打开并正在使用Perl写入文件而不是文件句柄?
- 28. Indy发送文件并关闭打开的句柄
- 29. 使用打开的句柄删除或重命名文件
- 30. 可以在打开的文件句柄上使用Linux inotify吗?
这不适用于例如FreeBSD系统,因为它们没有/ proc/filesystem。另外:这不回答OP的问题。 – arne
我喜欢wallyk的答案,它更便于携带,并且依赖于子系统提供的很少的设施。但是,就我而言,我需要确保计算文件句柄的尝试有很高的成功机会;即不必打开和关闭更多的文件句柄。从这个意义上说,chown的解决方案更好,因为它只使用了一个文件句柄。 –
@CodeMedic:wallyk解决方案随时只需要一个额外的文件处理程序,因为它在循环中打开并关闭它。 – salva