Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top