2010-07-24 4 views

Antwort

4

PATH_MAX ist die maximale Länge eines Dateisystempfads. NAME_MAX ist die maximale Länge eines Dateinamens (an einer bestimmten Stelle). So ist /foo/bar durch PATH_MAX beschränkt, und nur der bar Teil hat seine Länge durch NAME_MAX begrenzt.

Sie können diese zur Laufzeit über pathconf, wie _PC_PATH_MAX und _PC_NAME_MAX erhalten, obwohl Standardpraxis in der Regel nur die statischen Makros zur Kompilierzeit verwenden. Ich nehme an, es wäre besser, die Laufzeitoption zu verwenden, da Sie möglicherweise längere Werte unterstützen könnten, aber ich bin mir nicht sicher, welche Systeme (falls überhaupt) eine Rückgabe von pathconf liefern, die größer ist als der Wert von POSIX_FOO_MAX Werte.

+0

Können Sie kommentieren, ob sie in Python verfügbar sind und wo? –

+0

@Matt Joiner: Deine Frage macht nur wirklich Sinn für C; Es gibt keine "Kompilierzeit" für Python- oder Shell-Skripte. Wenn Sie eine Skriptsprache verwenden, ist es auch unwahrscheinlich, dass diese Variablen für Sie nützlich sind. Verwenden Sie einfach eine Zeichenfolge mit unbestimmter Länge, um Ihre Pfade zu bearbeiten. Außerdem sind dies systemspezifische Variablen, und ein Python-Skript sollte idealerweise portabel sein, so dass Sie diese möglicherweise nicht verwenden möchten und stattdessen beim Erstellen/Zugreifen auf eine Datei nach "Pfad zu lange" -Fehlern suchen. – Borealid

+2

Ich schreibe ein Dateisystem in Python, also sind sie in der Tat von großem Interesse. Ich rufe 'os.fpathconf' in meiner Gerätedatei als beste Schätzung für' PATH_MAX' und 'NAME_MAX' ist eine Eigenschaft meiner Implementierung, die durch' struct statvfs' zurückgegeben wird. Trotz der fehlenden Python-Tipps ist dies eine gute Antwort. –

0

Auf den meisten Betriebssystemen sollte PATH_MAX überhaupt nicht definiert werden. Es sollte überhaupt nur definiert werden, wenn das Betriebssystem eine maximale Länge für eine Zeichenfolge hat, die einen Pfad beschreibt, den die meisten Betriebssysteme nicht haben; In diesen Fällen sollten Sie einen Fehler erhalten, wenn Sie PATH_MAX außerhalb eines Makros verwenden.

Sie sollten vermeiden, sich auf die Existenz von PATH_MAX zu verlassen und versuchen, es in seiner Gesamtheit zu ignorieren.

Das PATH_MAX existiert überhaupt, auf den meisten Betriebssystemen, ist eigentlich ein Fehler. Soweit ich weiß, werden sie nur von Windows-Betriebssystemen akzeptiert.