PATH_MAX не объявляется при компиляции в Ubuntu 10.04 - PullRequest
5 голосов
/ 24 ноября 2010

Я пытаюсь скомпилировать программу на C в Ubuntu 10.04, созданную для 8.04.Сбой, потому что мы использовали PATH_MAX и другие константы, которые должны быть определены в limits.h.Согласно различным источникам, она должна быть частью POSIX-совместимой библиотеки C.

Это ошибка в Ubuntu 10.04 или есть правильный способ ее решения?

1 Ответ

7 голосов
/ 24 ноября 2010

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, в некоторых (на мой взгляд, очень ошибочных) надеждах, что когда-нибудь ограничения будут сняты, и приложения будут немедленнобыть в состоянии воспользоваться снятием ограничений.Однако для надежности приложений и ядра на самом деле гораздо лучше иметь фиксированные ограничения, если они достаточно велики (как и ограничения Linux).

...