Trên một số hệ thống nhất định (xem bên dưới), bạn có thể đếm chúng trong/proc/[pid]/fd. Nếu không có một trong số đó, hãy xem bên dưới cho: wallyk's answer.
Trong c, bạn có thể liệt kê các thư mục và đếm tổng số, hoặc liệt kê các nội dung 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;
}
Trong bash, một cái gì đó như:
Hệ điều hành
ls -l /proc/[pid]/fd/ | wc -l
có hỗ trợ hệ thống tệp proc bao gồm, nhưng là không giới hạn ở:
Solaris
IRIX
Tru64 UNIX
BSD
Linux (mà mở rộng nó để dữ liệu không quá trình liên quan đến)
IBM AIX (mà căn cứ thực hiện của nó trên Linux để cải thiện khả năng tương thích)
QNX
Plan 9 từ Bell Labs
Đây không phải là di động để ví dụ: Các hệ thống FreeBSD vì chúng không có hệ thống tập tin/proc /. Ngoài ra: Điều này không trả lời câu hỏi của OP. – arne
Tôi thích câu trả lời của wallyk, nó là xách tay hơn, và dựa vào rất ít cơ sở được cung cấp bởi hệ thống con. Nhưng, trong trường hợp của tôi, tôi cần phải chắc chắn rằng các nỗ lực để đếm tập tin xử lý có một cơ hội cao để thành công; tức là không phải mở và đóng nhiều tập tin xử lý hơn. Trong ý nghĩa đó, giải pháp của chown là tốt hơn, vì nó chỉ sử dụng một tập tin xử lý nhiều hơn trong nỗ lực này. –
@CodeMedic: giải pháp wallyk chỉ yêu cầu một trình xử lý tệp bổ sung bất kỳ lúc nào khi nó mở và đóng nó bên trong vòng lặp. – salva