Путь MAX не объявлен при компиляции на Ubuntu 10.04


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

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

1 5

1 ответ:

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).