2008-09-05 11 views
7

En Fedora Core 7, estoy escribiendo un código que se basa en ARG_MAX. Sin embargo, incluso si yo #include <limits.h>, la constante aún no está definida. Mis investigaciones muestran que está presente en <sys/linux/limits.h>, pero se supone que es portátil en Win32/Mac/Linux, por lo que incluirlo directamente no es una opción. ¿Que está pasando aqui?¿Por qué ARG_MAX no está definido a través de limits.h?

Respuesta

8

La razón por la que no está en los límites.h es que no es una cantidad que da los límites del rango de valores de un tipo integral en función del ancho de bits en la arquitectura actual. Ese es el rol asignado a los límites.h por el estándar ISO.

El valor que le interesa no está ligado al hardware en la práctica y puede variar de una plataforma a otra y quizás de una compilación del sistema a una compilación del sistema.

Lo correcto es llamar al sysconf y pedirle "ARG_MAX" o "_POSIX_ARG_MAX". Creo que es la solución compatible con POSIX.

Acc. En mi documentación, incluye uno o ambos de unistd.h o limits.h según los valores que está solicitando.

Otro punto: muchas implementaciones de la familia de funciones del ejecutor devuelven E2BIG o un valor similar si intentas llamarlas con un entorno de gran tamaño. Esta es una de las condiciones definidas bajo las cuales el ejecutivo puede regresar.

-2

ARG_MAX se define en /usr/include/linux/limits.h. Mi versión del kernel de Linux es 3.2.0-38.