为什么ARG_MAX没有通过limits.h定义?

Jos*_*ews 7 linux limits

在Fedora Core 7上,我正在编写一些依赖的代码ARG_MAX.但是,即使我#include <limits.h>,常数仍未定义.我的调查显示它存在<sys/linux/limits.h>,但这应该可以在Win32/Mac/Linux上移植,所以直接包含它不是一个选项.这里发生了什么?

Tho*_*yer 8

它不在limits.h中的原因是它不是基于当前体系结构的位宽给出整数类型值范围限制的数量.这是ISO标准赋予limits.h的角色.

您感兴趣的值在实践中不受硬件约束,并且可能因平台而异,也许系统构建可能因系统构建而异.

正确的做法是调用sysconf并询问"ARG_MAX"或"_POSIX_ARG_MAX".无论如何,我认为这是符合POSIX标准的解决方案.

加.在我的文档中,您根据要求的值包含unistd.h或limits.h中的一个或两个.

另一点:exec系列函数的许多实现返回E2BIG或类似值,如果您尝试使用超大环境调用它们.这是exec实际可以返回的定义条件之一.