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

时间:2008-09-05 19:39:37

标签: linux limits

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

2 个答案:

答案 0 :(得分:8)

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

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

正确的做法是致电sysconf并询问“ARG_MAX”或“_POSIX_ARG_MAX”。我认为无论如何都是符合POSIX标准的解决方案。

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

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

答案 1 :(得分:-2)

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