2010-07-24 10 views

Respuesta

4

PATH_MAX es la longitud máxima de una ruta del sistema de archivos. NAME_MAX es la longitud máxima de un nombre de archivo (en un lugar determinado). Por lo tanto, /foo/bar está restringido por PATH_MAX, y solo la parte bar tiene su longitud limitada por NAME_MAX.

puede obtener estos en tiempo de ejecución a través de pathconf, como _PC_PATH_MAX y _PC_NAME_MAX, aunque la práctica estándar es por lo general sólo para utilizar las macros estáticos en tiempo de compilación. Supongo que sería mejor utilizar la opción de tiempo de ejecución porque potencialmente podría admitir valores más largos de esa manera, pero no estoy seguro de qué sistemas (en caso de haberlos) realmente proporcionan un retorno desde pathconf que es mayor que el valor de POSIX_FOO_MAX valores.

+0

¿Puede comentar si están disponibles o no en Python, y dónde? –

+0

@Matt Joiner: Su pregunta solo tiene sentido para C; no hay un "tiempo de compilación" para Python o shell scripting. Si está utilizando un lenguaje de scripting, estas variables tampoco son útiles para usted; solo use una cadena de longitud indefinida para manipular sus rutas. Además, estas son variables específicas del sistema, y ​​una secuencia de comandos de Python idealmente debería ser portable, por lo que es posible que no desee utilizarlas y, en su lugar, simplemente verifique los errores de "ruta demasiado larga" al crear/acceder a un archivo. – Borealid

+2

Escribo un sistema de archivos en Python, por lo que son de gran interés. Llamaré a 'os.fpathconf' en mi archivo de dispositivo como una mejor estimación para' PATH_MAX', y 'NAME_MAX' es una propiedad de mi implementación devuelta a través de' struct statvfs'. A pesar de perder los consejos de Python, esta es una buena respuesta. –

0

En la mayoría de los sistemas operativos, PATH_MAX no se debe definir en absoluto. Se supone que solo debe definirse en absoluto, si el sistema operativo tiene una longitud máxima para una cadena que describe una ruta, que la mayoría de los sistemas operativos no tienen; en esos casos, debería obtener un error si usa PATH_MAX fuera de una macro.

Debe evitar confiar en la existencia de PATH_MAX y tratar de ignorarlo en su totalidad.

que PATH_MAX existe en absoluto, en la mayoría de los sistemas operativos, es en realidad un error. Hasta donde yo sé, solo los sistemas operativos de Windows realmente lo honran.

Cuestiones relacionadas