En ciertos sistemas (consulte a continuación), puede contarlos en/proc/[pid]/fd. Si no está en uno de esos, vea a continuación para: wallyk's answer.
en C, se pueden listar el directorio y el recuento del total, o una lista del contenido 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;
}
En bash, algo así como:
ls -l /proc/[pid]/fd/ | wc -l
sistemas operativos que soportan la el sistema de archivos proc incluye, pero son no limitado a:
Solaris
IRIX
Tru64 UNIX
BSD
Linux (que se extiende a los datos no relacionados con procesos)
IBM AIX (que basa su aplicación en Linux para mejorar la compatibilidad)
QNX
Plan 9 from Bell Labs
Esto no es portátil, p. Ej. Los sistemas FreeBSD ya que no tienen el/proc/filesystem. Además: Esto no responde la pregunta del OP. – arne
Me gustó la respuesta de Wallyk, es más portátil, y depende de muy pocas instalaciones proporcionadas por el subsistema. Pero, en mi caso, necesito asegurarme de que el intento de contar los identificadores de archivos tenga muchas posibilidades de tener éxito; es decir, al no tener que abrir y cerrar más identificadores de archivo. En ese sentido, la solución de chown es mejor, ya que solo utiliza un identificador de archivo más en el esfuerzo. –
@CodeMedic: la solución wallyk requiere solo un manejador de archivos adicional en cualquier momento, ya que se abre y lo cierra dentro del ciclo. – salva