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

有帮助吗?

解决方案

它不在 limit.h 中的原因是它不是一个给出基于当前体系结构的位宽度的整数类型的值范围限制的量。这就是 ISO 标准分配给 limit.h 的角色。

您感兴趣的价值在实践中不受硬件限制,并且可能因平台而异,甚至可能因系统构建而异。

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

附件。在我的文档中,您可以根据您请求的值包含 unistd.h 或 limit.h 之一或两者。

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top