2010-11-24 16 views
5

Estoy tratando de compilar un programa C en Ubuntu 10.04 hecho para 8.04. No funciona porque hemos utilizado PATH_MAX y otras constantes que deberían definirse en limits.h. Según diversos recursos, debe ser parte de una biblioteca C compatible con POSIX.PATH_MAX no declarado al compilar en Ubuntu 10.04

¿Es esto un error en Ubuntu 10.04 o hay una forma adecuada de resolver esto?

Respuesta

7

POSIX define muchos de estos límites como opcionales. Si un límite FOO no está definido en limits.h, significa que el sistema puede no tener dicho límite o que el límite puede variar en tiempo de ejecución o depende de la ruta a la que se aplica. En estos casos, se utilizan las pathconf, fpathconf, o sysconf funciones y los _PC_* y _SC_* macros, como en:

path_max = pathconf("/", _PC_PATH_MAX); 

o:

page_size = sysconf(_SC_PAGE_SIZE); 

Desafortunadamente GNU (la biblioteca GNU C) define muchos límites como variable de tiempo de ejecución cuando son realmente constantes en Linux, en algunos (en mi opinión, muy equivocados) la esperanza de que algún día se eliminarán los límites y las aplicaciones podrán aprovechar de inmediato la eliminación de los límites. Sin embargo, para la robustez de la aplicación y del kernel, en realidad es mucho mejor tener límites fijos siempre que sean lo suficientemente grandes (como lo son los límites de Linux).

+2

También sospecho que se trata de un intento de alentar a las aplicaciones para que sean portátiles a los sistemas que no tienen un límite definido por el sistema, como GNU HURD. – caf

+0

@caf: Creo que descubrió el motivo exactamente. –

Cuestiones relacionadas