Pregunta

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?

¿Fue útil?

Solución

La razón por la que no está en limits.h es que no es una cantidad que proporcione los límites del rango de valores de un tipo integral basado en el ancho de bits en la arquitectura actual.Esa es la función asignada a limites.h por el estándar ISO.

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

Lo correcto es llamar sysconf y pídale "ARG_MAX" o "_POSIX_ARG_MAX".I pensar esa es la solución compatible con POSIX de todos modos.

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

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

Otros consejos

ARG_MAX está definido en /usr/include/linux/limits.h.La versión de mi kernel de Linux es 3.2.0-38.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top