Путь MAX не объявлен при компиляции на Ubuntu 10.04
Я пытаюсь скомпилировать программу на языке Си в Ubuntu 10.04, сделанную для 8.04. Это не удается, потому что мы использовали PATH_MAX
и другие константы, которые должны быть определены в limits.h
. Согласно различным источникам, он должен быть частью POSIX-совместимой библиотеки C.
Это ошибка в Ubuntu 10.04 или есть правильный способ решить эту проблему?
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).