Какова связь между PATH_MAX и NAME_MAX и как мне получить? - PullRequest
5 голосов
/ 24 июля 2010

В limits.h и в различных местах на страницах руководства POSIX есть ссылки на PATH_MAX и NAME_MAX. Как они связаны друг с другом? Где официальная документация для них? Как получить их во время выполнения и (при необходимости) во время компиляции для сред C, Python и GNU (shell)?

Ответы [ 2 ]

4 голосов
/ 24 июля 2010

PATH_MAX - максимальная длина пути файловой системы.NAME_MAX - максимальная длина имени файла (в определенном месте).Таким образом, /foo/bar ограничено PATH_MAX, и только длина части bar ограничена NAME_MAX.

. Вы можете получить их во время выполнения через pathconf, например _PC_PATH_MAXи _PC_NAME_MAX, хотя стандартная практика обычно заключается в использовании статических макросов во время компиляции.Я полагаю, что было бы лучше использовать параметр времени выполнения, потому что таким образом вы могли бы потенциально поддерживать более длинные значения, но я не уверен, что (если таковые имеются) системы фактически обеспечивают возврат от pathconf, который больше значенияPOSIX_FOO_MAX значения.

0 голосов
/ 21 марта 2015

В большинстве операционных систем PATH_MAX не должно определяться вообще. Предполагается, что он будет определен только в том случае, если операционная система имеет максимальную длину для строки, описывающей путь, чего нет в большинстве операционных систем; в этих случаях вы должны получить ошибку, если используете PATH_MAX вне макроса.

Вам следует избегать полагаться на существование PATH_MAX и пытаться полностью игнорировать его.

То, что PATH_MAX существует вообще, в большинстве операционных систем, на самом деле является ошибкой. Насколько я знаю, только операционные системы Windows действительно соблюдают это.

...