GNU/Linux >> Tutoriels Linux >  >> Linux

Obtenir le nombre de descripteurs de fichiers actuellement utilisés à partir du code C

Pour le nombre de processus en cours, vous pouvez utiliser getrlimit pour obtenir la limite du descripteur de fichier, puis parcourez tous les entiers de 0 à cette limite et essayez d'appeler fcntl avec le F_GETFD commande. Il ne réussira que sur les descripteurs de fichiers réellement ouverts, vous permettant de les compter.

Modifier : J'ai maintenant une meilleure façon de le faire. Après avoir obtenu le rlimit , faites un grand tableau de struct pollfd (aussi grand que la limite si possible ; sinon, vous pouvez le décomposer en plusieurs exécutions/appels) avec chaque fd dans la plage et le events membre défini sur 0. Appelez poll sur le tableau avec 0 timeout, et recherchez le POLLNVAL drapeau dans le revents pour chaque membre. Cela vous indiquera lesquels parmi un ensemble potentiellement énorme de fds sont invalides avec un seul appel système, plutôt qu'un seul appel système par fd.


Vous pouvez lire /proc/sys/fs/file-nr pour trouver le nombre total de descripteurs de système de fichiers alloués et libres ainsi que le maximum autorisé.

[[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

Pour calculer le nombre actuellement utilisé, faites simplement allocated - free . Vous pouvez également calculer un pourcentage de descripteurs utilisés en faisant ((allocated - free) / max) * 100

En ce qui concerne le processus par processus, je ne suis pas sûr d'une manière programmatique de le faire.

Voici un tutoriel sur la façon de le faire avec lsof de toute façon :http://linuxshellaccount.blogspot.com/2008/06/finding-number-of-open-file-descriptors.html


Puisque vous dites que vous êtes sous Linux, vous pouvez ouvrir le dossier /proc/self/fd/ qui doit contenir des liens symboliques vers tous les descripteurs de fichiers ouverts .


Linux
  1. Impossible d'obtenir le bon code de sortie à partir d'un script ?

  2. Extraire le bloc de code clôturé triple backtick "` Extraits du fichier Markdown ?

  3. Lire des modèles Grep à partir d'un fichier ?

  4. Comment empêcher les journaux de devenir trop volumineux ?

  5. Comment créer un fichier sous Linux à partir de la fenêtre du terminal ?

Démarrer avec ls

5 façons de compter le nombre de lignes dans un fichier

Comment copier un fichier d'un autre répertoire vers celui en cours ?

Compter les lignes dans les fichiers volumineux

Créer un PEM à partir d'un fichier PPK

En quoi install -c est différent de cp