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

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

不在limits.h中的原因是它不是在当前体系结构上根据位宽给出整数类型值范围的限制的数量。 这是由ISO标准分配给limits.h的角色。

您感兴趣的价值在实践中并不是硬件绑定的,并且可以因平台而异,也可能从系统构建到系统构建。

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

加。 对于我的文档,根据您请求的值包含unistd.h或limits.h中的一个或两个。

还有一点:exec函数家族的许多实现都会返回E2BIG或类似的值,如果你尝试在超大的环境中调用它们的话。 这是exec可以实际返回的定义条件之一。

ARG_MAX在/usr/include/linux/limits.h中定义。 我的Linux内核版本是3.2.0-38。