C: Pfadlänge (fopen, opendir, ...)



  • Moin zusammen,

    ich arbeite derzeit ein wenig mit C-Funktionen wie fopen, opendir, stat, access etc. pp.
    Durch Tutorials weiß ich, dass es bei den Dateinamen eine Beschränkung auf z.B: 255 Zeichen gibt.
    Gibt es solch eine Beschränkung auch bei dem bloßen Dateipfad oder ist der Pfad wurscht?

    LG & Danke



  • Ob Pfad oder Name, die Beschränkung ist FILENAME_MAX aus stdio.h.
    🙂



  • Außerdem ist das ganze Betriebs- und Datei-Systemabhängig.



  • DirkB schrieb:

    Außerdem ist das ganze Betriebs- und Datei-Systemabhängig.

    Korrekt. Deswegen muss man beim Anlegen von Dateien immer prüfen, ob das geklappt hat.

    Konkretes Beispiel: Die Funktion "verschlüsseltes Home-Verzeichnis" unter Ubuntu senkt die maximal erlaubte Länge von Dateinamen von ca. 254 auf deutlich unter 200 Bytes.



  • Uhh, ich hab mich etwas unglücklich ausgedrückt :S

    Mit Pfad meinte ich die gesamte Wurst wie:
    "/bla/blubb/bla/bla/..<tausend unterordner später>../datei.txt"

    Anders gefragt: darf ein Char-String, in seiner gesamten länge (siehe die Wurst), maximal FILENAME_MAX lang sein bzw. wird nur so weit gelesen oder bezieht sich FILENAME_MAX nur auf die einzelnen Datei-/Ordnernamen?

    Problem: was ist, wenn man einen Datei- und Ordnernamen von FILENAME_MAX-1 hat, dann dürfte es ja nicht gehen. Fände ich ziemlich gaga, da der Funktionen die Länge der Wurst doch egal sein sollte.

    mFg



  • Gregor Kacknoob schrieb:

    Uhh, ich hab mich etwas unglücklich ausgedrückt :S

    Mit Pfad meinte ich die gesamte Wurst wie:
    "/bla/blubb/bla/bla/..<tausend unterordner später>../datei.txt"

    Anders gefragt: darf ein Char-String, in seiner gesamten länge (siehe die Wurst), maximal FILENAME_MAX lang sein bzw. wird nur so weit gelesen oder bezieht sich FILENAME_MAX nur auf die einzelnen Datei-/Ordnernamen?

    Weder noch. Der ganze Pfad darf viel größer als 255 Zeichen werden, das kannst du sehr einfach ausprobieren. Im Endeffekt hängen die Limits stark vom Dateisystem und vom Betriebssystem ab: http://en.wikipedia.org/wiki/Comparison_of_file_systems#Limits

    Unter Linux gibt es im header limits.h die Konstanten PATH_MAX und NAME_MAX. Dadurch hat ein normales Linux ein Limit von 4096 Bytes für den Pfad und 255 Bytes für einen Dateinamen. Je nach darunterliegendem Dateisystem können die tatsächlichen Limits aber viel kleiner sein.


Anmelden zum Antworten