Erste Zählung der aktuell verwendeten Datei-Deskriptoren, die aus C-code
Gibt es eine C-API die:
- Stroms, der Datei-Deskriptoren-system Breite
- Aktuell verwendeten file-Deskriptoren des aktuellen Prozesses
- korrigiert es Datei-Deskriptoren
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für den aktuellen Prozess zu zählen, die Sie verwenden können
getrlimit
zu bekommen, die den Datei-descriptor limit, dann Durchlaufen alle ganzen zahlen von 0 zu begrenzen und versuchen Sie den Aufruffcntl
mit derF_GETFD
Befehl. Er gelingt nur auf der Datei-Deskriptoren, die tatsächlich offen, so dass Sie zählen.Edit: habe ich jetzt einen besseren Weg, es zu tun. Nach Erhalt der
rlimit
, machen eine große Palette vonstruct pollfd
(so groß wie der Grenzwert, wenn möglich; sonst können Sie brechen Sie in mehrere Läufe/Telefonate) mit jede fd in der range und dieevents
member auf 0 gesetzt. Rufen Siepoll
auf das array mit 0 timeout, und suchen Sie nach derPOLLNVAL
- flag in derrevents
für jedes Mitglied. Dies wird Ihnen sagen, was unter einer potenziell riesigen Menge von fds sind unwirksam, mit einer einzigen Systemaufruf, sondern als einen syscall pro fd.Da Sie sagen, Sie sind auf Linux, können Sie öffnen Sie den Ordner
/proc/self/fd/
enthalten symbolische links auf alle offenen Datei-Deskriptoren.Lesen Sie
/proc/sys/fs/file-nr
zu finden, die Gesamtanzahl der zugewiesenen und freien Datei-system behandelt werden, sowie die maximal zulässige.Berechnen Sie die Anzahl, die momentan in Verwendung, nur
allocated - free
. Man könnte auch berechnen, Prozentsatz des verwendeten Deskriptoren by doing((allocated - free) /max) * 100
Als für den pro-Prozess, ich bin mir nicht sicher, programmatische Art und Weise Sie es tun können.
Hier ist ein tutorial, wie zu tun Sie es mit
lsof
sowieso: http://linuxshellaccount.blogspot.com/2008/06/finding-number-of-open-file-descriptors.htmldup
oderfork
.allocated
sagt Ihnen die Zahl zugeordnet, da boot,free
sagt Ihnen die Zahl derjenigen, die befreit worden.allocated - free
= die Zahl, die derzeit geöffnet sind, auf dem system. Wenn Sie wollen einfach nur wissen, wie viele Datei-Deskriptoren zugewiesen worden sind, auf das system, schauen Sie einfachallocated
. Oder denke ich etwas anders?dup
,dup2
,fcntl/F_DUPFD
oder Vererbung überfork
) alle die teilen sich Eigenschaften wie der aktuelle offset in der Datei, Fahnen wie append-Modus, etc., und der Datei-öffnen-Beschreibung wird nicht geschlossen, bis alle Datei-Deskriptoren, die sich auf ihn geschlossen werden.Ich bin nicht positiv über Datei Deskriptoren, aber Sie können leicht überprüfen
<stdio.h>
- Dateien.In
stdio.h
,__sF
ist eine Datei, array, speichert alleFILE
. (googeln__sF
zeigt vielestdio
s mit einem passenden keyword).Wenn ein
FILE
's flags sind leer, die Datei nicht in Gebrauch ist. Also, können wir gehen einfach durch__sF
, überprüfen Sie die Fahnen der einzelnenFILE
im array.error: ‘__sF’ undeclared (first use in this function)
.