GNU/Linux >> Tutoriales Linux >  >> Linux

Obtener el recuento de los descriptores de archivo usados ​​actualmente del código C

Para el recuento de procesos actual, puede usar getrlimit para obtener el límite del descriptor de archivo, luego repita todos los enteros desde 0 hasta ese límite e intente llamar a fcntl con el F_GETFD dominio. Tendrá éxito solo en los descriptores de archivo que estén realmente abiertos, permitiéndole contarlos.

Editar: Ahora tengo una mejor manera de hacerlo. Después de obtener el rlimit , crea una gran matriz de struct pollfd (tan grande como el límite si es posible; de ​​lo contrario, puede dividirlo en múltiples ejecuciones/llamadas) con cada fd en el rango y el events miembro establecido en 0. Llamada poll en la matriz con 0 tiempo de espera y busque el POLLNVAL bandera en el revents para cada miembro. Esto le dirá cuáles entre un conjunto potencialmente enorme de fds no son válidos con una sola llamada al sistema, en lugar de una llamada al sistema por fd.


Puedes leer /proc/sys/fs/file-nr para encontrar el número total de identificadores de sistema de archivos asignados y libres, así como el máximo permitido.

[[email protected] proc]# cat /proc/sys/fs/file-nr
3853    908     53182
|       |       |
|       |       |
|       |       max: maximum open file descriptors
|       free: total free allocated file descriptors
allocated: total allocated file descriptors since boot

Para calcular el número que está actualmente en uso, simplemente haga allocated - free . También puede calcular un porcentaje de descriptores usados ​​haciendo ((allocated - free) / max) * 100

En cuanto al proceso por proceso, no estoy seguro de ninguna forma programática en la que pueda hacerlo.

Aquí hay un tutorial sobre cómo hacerlo con lsof de todos modos:http://linuxshellaccount.blogspot.com/2008/06/finding-number-of-open-file-descriptors.html


Como dices que estás en Linux, puedes abrir la carpeta /proc/self/fd/ que debe contener enlaces simbólicos a todos los descriptores de archivo abiertos .


Linux
  1. ¿Es posible en Bash, comenzar a leer un archivo desde un desplazamiento de conteo de bytes arbitrario?

  2. ¿Contar líneas en un archivo?

  3. Editor de código:desde el administrador de archivos

  4. Contar líneas, palabras y caracteres de un archivo en Linux

  5. Subprocesos y descriptores de archivos

Comenzando con ls

5 formas de contar el número de líneas en un archivo

¿Descriptores de archivos y secuencias de comandos de Shell?

¿Cómo copiar un archivo de otro directorio al actual?

¿Cómo obtener la ruta al archivo actual (pwd) en Linux desde C?

¿En qué se diferencia install -c de cp?