为什么未通过limit.h定义ARG_MAX?
时间:2020-03-05 18:48:29 来源:igfitidea点击:
在Fedora Core 7上,我正在编写一些依赖于ARG_MAX
的代码。但是,即使我#include <limits.h>
,该常量仍未定义。我的调查表明,它存在于<sys / linux / limits.h>中,但是应该可以在Win32 / Mac / Linux上移植,因此不能直接包含它。这里发生了什么?
解决方案
回答
它之所以不在限制中,是因为它不是一个根据当前体系结构上的位宽给出整数类型的值范围限制的数量。这就是ISO标准分配给limits.h的角色。
我们感兴趣的价值实际上不受硬件限制,并且可能因平台而异,并且可能因系统构建而异。
正确的做法是调用sysconf,并要求它输入" ARG_MAX"或者" _POSIX_ARG_MAX"。我认为这还是POSIX兼容的解决方案。
累积在我的文档中,根据我们要求的值,我们包含unistd.h或者limits.h中的一个或者两个。
还有一点:exec系列函数的许多实现都返回E2BIG或者类似的值(如果我们尝试在超大型环境中调用它们)。这是exec实际可以返回的已定义条件之一。