Fedora Core 7에서 나는 ARG_MAX
에 의존하는 코드를 작성하고 있습니다. 그러나 I #include <limits.h>
이더라도 상수는 여전히 정의되지 않습니다. 내 조사 결과에 따르면이 파일은 <sys/linux/limits.h>
에 있지만, Win32/Mac/Linux에서 이식 할 수 있으므로이 파일을 직접 포함하는 것은 옵션이 아닙니다. 무슨 일 이니?limits.h를 통해 ARG_MAX가 정의되지 않은 이유는 무엇입니까?
7
A
답변
8
limits.h에없는 이유는 현재 아키텍처의 비트 너비를 기반으로하는 정수 유형의 값 범위 한계를 제공하는 수량이 아니기 때문입니다. 이것이 ISO 표준에 의해 limits.h에 할당 된 역할입니다.
관심있는 가치는 실제로 하드웨어에 종속적이지 않으며 플랫폼에 따라 다르며 시스템 빌드에서 시스템 빌드로 다양 할 수 있습니다.
할 일은 sysconf
으로 전화하여 "ARG_MAX"또는 "_POSIX_ARG_MAX"를 요청하는 것입니다. I 어쨌든이 POSIX 호환 솔루션이라고 생각합니다.
Acc. 내 문서에는 요청한 값에 따라 unistd.h 또는 limits.h 중 하나 또는 모두가 포함됩니다.
또 다른 한 가지 포인트 : exec 환경의 많은 구현은 너무 큰 환경에서 호출하려고하면 E2BIG 또는 비슷한 값을 반환합니다. 이것은 exec가 실제로 리턴 할 수있는 정의 된 조건 중 하나입니다.
-2
ARG_MAX는 /usr/include/linux/limits.h에 정의되어 있습니다. 내 리눅스 커널 버전은 3.2.0-38이다.