GNU/Linux >> Linux Esercitazione >  >> Linux

Ottenere il conteggio dei descrittori di file attualmente utilizzati dal codice C

Per il conteggio del processo corrente, puoi utilizzare getrlimit per ottenere il limite del descrittore di file, quindi iterare su tutti i numeri interi da 0 a quel limite e provare a chiamare fcntl con il F_GETFD comando. Avrà successo solo sui descrittori di file che sono effettivamente aperti, permettendoti di contarli.

Modifica: Ora ho un modo migliore per farlo. Dopo aver ottenuto il rlimit , creare un ampio array di struct pollfd (grande quanto il limite se possibile; altrimenti puoi suddividerlo in più esecuzioni/chiamate) con ogni fd nell'intervallo e events membro impostato su 0. Chiama poll sull'array con timeout 0 e cerca il POLLNVAL flag nel revents per ogni membro. Questo ti dirà quali tra un insieme potenzialmente enorme di fd non sono validi con una singola chiamata di sistema, piuttosto che una chiamata di sistema per fd.


Puoi leggere /proc/sys/fs/file-nr per trovare il numero totale di handle di file system allocati e liberi, nonché il massimo consentito.

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

Per calcolare il numero attualmente in uso, basta digitare allocated - free . Puoi anche calcolare una percentuale di descrittori usati facendo ((allocated - free) / max) * 100

Per quanto riguarda i processi, non sono sicuro di un modo programmatico per farlo.

Ecco un tutorial su come farlo con lsof comunque:http://linuxshellaccount.blogspot.com/2008/06/finding-number-of-open-file-descriptors.html


Dato che dici di essere su Linux, puoi aprire la cartella /proc/self/fd/ che dovrebbe contenere collegamenti simbolici a tutti i descrittori di file aperti .


Linux
  1. Non riesci a ottenere il codice di uscita corretto da uno script?

  2. Estrai il blocco di codice recintato con triplo backtick "` Estratti dal file Markdown?

  3. È possibile in Bash iniziare a leggere un file da un offset arbitrario del conteggio dei byte?

  4. Contare le righe in un file?

  5. Leggere i modelli Grep da un file?

5 modi per contare il numero di righe in un file

Descrittori di file e script di shell?

Come copiare un file da un'altra directory a quella corrente?

Editor di codice:da File Manager

Conta righe, parole e caratteri da un file in Linux

Contare le righe in file di grandi dimensioni