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

最佳答案

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

您感兴趣的值(value)实际上不受硬件限制,并且可能因平台而异,并且可能因系统构造而异。

正确的做法是调用sysconf并要求其输入“ARG_MAX”或“_POSIX_ARG_MAX”。我认为这还是POSIX兼容的解决方案。

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

还有一点:exec系列函数的许多实现都返回E2BIG或类似的值(如果您尝试在超大型环境中调用它们的话)。这是exec实际可以返回的已定义条件之一。

09-10 09:52
查看更多