Путь 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).