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