Почему ARG_MAX не определен в файле Limits.h?
Вопрос
В Fedora Core 7 я пишу код, основанный на ARG_MAX
.Однако, даже если я #include <limits.h>
, константа до сих пор не определена.Мои исследования показывают, что он присутствует в <sys/linux/limits.h>
, но он должен быть переносимым на Win32/Mac/Linux, поэтому его прямое включение невозможно.Что тут происходит?
Решение
Причина, по которой его нет в файле limit.h, заключается в том, что это не величина, задающая пределы диапазона значений целочисленного типа на основе разрядности в текущей архитектуре.Эта роль отведена файлу limit.h по стандарту ISO.
Значение, которое вас интересует, на практике не привязано к оборудованию и может варьироваться от платформы к платформе и, возможно, от сборки системы.
Правильнее всего позвонить sysconf
и запросите «ARG_MAX» или «_POSIX_ARG_MAX».я думать в любом случае это POSIX-совместимое решение.
Акк.в мою документацию вы включаете один или оба файла unistd.h или лимиты.h в зависимости от того, какие значения вы запрашиваете.
Еще один момент:многие реализации семейства функций exec возвращают E2BIG или подобное значение, если вы попытаетесь вызвать их в среде слишком большого размера.Это одно из определенных условий, при которых exec действительно может вернуться.
Другие советы
ARG_MAX определен в /usr/include/linux/limits.h.Моя версия ядра Linux — 3.2.0-38.