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).
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
@caf: Creo que descubrió el motivo exactamente. –