2010-11-24 2 views
5

8.04 용 Ubuntu 10.04에서 C 프로그램을 컴파일하려고합니다. PATH_MAXlimits.h에 정의되어야하는 다른 상수를 사용했기 때문에 실패합니다. 다양한 리소스에 따르면 POSIX 호환 C 라이브러리의 일부 여야합니다.Ubuntu 10.04에서 컴파일 할 때 PATH_MAX가 선언되지 않았습니다.

이것은 Ubuntu 10.04의 버그입니까? 아니면이를 해결할 적절한 방법이 있습니까?

답변

7

POSIX는 이러한 많은 한계를 선택적으로 정의합니다. 한도 FOO가 limits.h에 정의되어 있지 않으면 시스템에 제한이 없거나 런타임에 달라 지거나 적용되는 경로 이름에 따라 제한이있을 수 있음을 의미합니다. 이러한 경우에, 당신은에서와 pathconf, fpathconf, 또는 sysconf 기능과 _PC_*_SC_* 매크로를 사용

path_max = pathconf("/", _PC_PATH_MAX); 

또는 :

는 는
page_size = sysconf(_SC_PAGE_SIZE); 

불행하게도 GNU (GNU C 라이브러리)는 많은 정의 Linux에서 실제로 상수 일 때 런타임 변수로서의 제한은 언젠가는 제한이 제거되고 응용 프로그램이 즉시 제한 제거를 이용할 수있게되기를 바라는 일부 사람들에게는 (내 견해로는 오도 된) 희망입니다. 그러나 응용 프로그램과 커널의 견고성을 위해, (리눅스 한계가 있기 때문에) 충분히 큰 한 고정 된 한계를 갖는 것이 실제로 훨씬 낫습니다.

+2

GNU HURD와 같이 시스템에서 정의한 제한이없는 시스템으로 응용 프로그램을 이식 할 수 있도록 유도하려는 시도도 있습니다. – caf

+0

@caf : 나는 그 이유를 정확히 알아 냈다고 생각합니다. –

관련 문제