Hallo, gibt es einen unter UNIX Systemen portablen Weg, alle offenen Filedescriptoren des aktuellen Prozesses zu ermitteln? Unter Linux kann ich in /proc/self/fd nachschauen. Das ist aber leider nicht portabel. Für den Anfang reicht mir auch Linux+MacOSX. Danke, Torsten
Hallo, Am Dienstag, 19. Dezember 2006 10:02 schrieb Torsten Foertsch:
Hallo,
gibt es einen unter UNIX Systemen portablen Weg, alle offenen Filedescriptoren des aktuellen Prozesses zu ermitteln?
Unter Linux kann ich in /proc/self/fd nachschauen. Das ist aber leider nicht portabel.
Für den Anfang reicht mir auch Linux+MacOSX.
Danke, Torsten
Ich fürchte es gibt kein Befehl mit dem man direkt die Liste bekommt. Jedenfalls kenne ich keinen. Am besten mal nach "POSIX" und "filedescripor" suchen. Ansonsten könnte man jeden möglichen Filedescriptor mit fstat() testen. Dazu muß man entweder den höchst möglichen Filedescriptor kennen, oder wenn man glück hat gibt fstat() eine anderen Fehler aus, wenn man den maximalen wert erreicht hat als wenn er nicht existiert. Das ist natürlich keine Performante Lösung. Bei meinem Linux Kernel sind das dann 1024 Tests, bei FreeBSD sogar 7264. Wieviel Filedecriptoren es bei MacOSX gibt weiß ich leider nicht... Etwas Performanter wirds wenn man nicht bei 0 anfängt. Dazu öffnet man einen Filedescriptor, alle Filedescriptoren unter dem neuen Filedescriptor sind für gewöhnlich offen. (keine 100% Garantie) MfG Conny Marco Menebröcker -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, On Tuesday 19 December 2006 10:02, Torsten Foertsch wrote:
gibt es einen unter UNIX Systemen portablen Weg, alle offenen Filedescriptoren des aktuellen Prozesses zu ermitteln?
Erst mal die moegliche maximale Anzahl der FIledescriptoren herausfinden. Z.B.: #include <limit.h> int getOpenMax() { #ifdef OPEN_MAX return OPEN_MAX; #else int max = sysconf(_SC_OPEN_MAX); if (max == -1) { // huuh? // Use some default? Post a message? It's up to you. } return max; #endif } #endif Danach in einer Schleife ein inertes Kommand wie z.B. int ret; const int max = getOpenMax(); for (int i = 0; i < max; i++) { ret = fcntl(i, F_GETFL); if (ret != -1) exists(); } Roman -- Roman Fietze Telemotive AG Büro Mühlhausen Breitwiesen 73347 Mühlhausen Tel.: +49(0)7335/18493-45 http://www.telemotive.de
Hallo, Am Die, 19 Dez 2006, Torsten Foertsch schrieb:
gibt es einen unter UNIX Systemen portablen Weg, alle offenen Filedescriptoren des aktuellen Prozesses zu ermitteln?
Unter Linux kann ich in /proc/self/fd nachschauen. Das ist aber leider nicht portabel.
Für den Anfang reicht mir auch Linux+MacOSX.
/dev/fd/? Sollte es zumindest unter *BSD geben, also evtl. auch unter MacOS. Zumindest unter openSUSE 10.2 mit Kernel 2.6.18.2-34-default und SuSE 6.2 mit Kernel 2.4.33.2 ist's jew. identisch, denn /dev/fd/ wird genau wie /proc/self/fd auf /proc/$PID/fd abggebildet: $ ./openfds reading /proc/self/fd/ 0 -> /dev/pts/11 1 -> /dev/pts/11 2 -> /dev/pts/11 3 -> /proc/12127/fd reading /dev/fd/ 0 -> /dev/pts/11 1 -> /dev/pts/11 2 -> /dev/pts/11 3 -> /proc/12127/fd Der fd 3 ist jew. das opendir selbst, mit dem das Verzeichnis ausgelesen wird. ;) -dnh -- Schliesslich haben wir unsere Gehirne ja nicht aus dem Restpostenverkauf bekommen. [WoKo in dag°] -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (4)
-
Conny Marco Menebröcker
-
David Haller
-
Roman Fietze
-
Torsten Foertsch