In limits.h
e in vari punti nelle manpage POSIX, ci sono riferimenti a PATH_MAX
e NAME_MAX
. Come si relazionano tra loro? Dov'è la documentazione ufficiale per loro? Come posso ottenerli in fase di esecuzione e (dove rilevante) compilare il tempo per gli ambienti C, Python e GNU (shell)?Qual è la relazione tra PATH_MAX e NAME_MAX e come ottengo?
risposta
PATH_MAX
è la lunghezza massima di un percorso del file system. NAME_MAX
è la lunghezza massima di un nome file (in un punto particolare). Quindi, è limitato da PATH_MAX
e solo la porzione bar
ha la lunghezza limitata da NAME_MAX
.
È possibile ottenere questi in fase di esecuzione tramite pathconf
, come _PC_PATH_MAX
e _PC_NAME_MAX
, anche se la pratica standard è generalmente solo per utilizzare le macro statiche in fase di compilazione. Suppongo che sarebbe meglio usare l'opzione runtime perché potresti potenzialmente supportare valori più lunghi in questo modo, ma non sono sicuro di quali (se esistono) sistemi forniscano effettivamente un ritorno da pathconf
che è maggiore del valore di POSIX_FOO_MAX
valori.
Sulla maggior parte dei sistemi operativi, lo standard PATH_MAX
non deve essere definito. Si suppone che debba essere definito solo se il sistema operativo ha una lunghezza massima per una stringa che descrive un percorso, che la maggior parte del sistema operativo non ha; in questi casi si dovrebbe ricevere un errore se si utilizza PATH_MAX
al di fuori di una macro.
È consigliabile evitare di fare affidamento sull'esistenza di PATH_MAX
e provare a ignorarlo nella sua interezza.
Quello PATH_MAX
esiste, sulla maggior parte dei sistemi operativi, è in realtà un bug. Per quanto ne so, solo i sistemi operativi Windows in realtà lo onorano.
Puoi commentare se sono disponibili o meno in Python e dove? –
@Matt Joiner: la tua domanda ha senso solo per C; non c'è "tempo di compilazione" per Python o script di shell. Se stai utilizzando un linguaggio di scripting, è improbabile che queste variabili ti siano utili: basta usare una stringa di lunghezza indefinita per manipolare i tuoi percorsi. Inoltre, queste sono variabili specifiche del sistema, e uno script Python dovrebbe idealmente essere portatile, quindi potresti non volerne sfruttare e invece controllare gli errori di "percorso troppo lungo" durante la creazione/l'accesso a un file. – Borealid
Sto scrivendo un filesystem in Python, quindi sono di grande interesse. Sto chiamando 'os.fpathconf' sul mio dispositivo come ipotesi migliore per' PATH_MAX', e 'NAME_MAX' è una proprietà della mia implementazione restituita attraverso' struct statvfs'. Nonostante manchi i suggerimenti Python questa è una buona risposta. –