7

我正在尝试在为 8.04 制作的 Ubuntu 10.04 中编译 C 程序。它失败了,因为我们使用PATH_MAX了和其他应该在limits.h. 根据各种资源,它应该是与 POSIX 兼容的 C 库的一部分。

这是 Ubuntu 10.04 中的错误还是有解决此问题的正确方法?

4

1 回答 1

9

POSIX 将许多此类限制定义为可选的。如果在 中未定义限制 FOO limits.h,则意味着系统可能没有此类限制,或者该限制可能在运行时发生变化或取决于它所应用的路径名。在这些情况下,您可以使用pathconf, fpathconf, orsysconf函数和_PC_*and_SC_*宏,如下所示:

path_max = pathconf("/", _PC_PATH_MAX);

或者:

page_size = sysconf(_SC_PAGE_SIZE);

不幸的是,GNU(GNU C 库)将许多限制定义为运行时变量,而这些限制在 Linux 上实际上是恒定的,在某些情况下(在我看来,这是非常错误的)希望有一天这些限制将被删除,应用程序将立即能够接受取消限制的好处。但是,对于应用程序和内核的健壮性,只要它们足够大(就像 Linux 的限制一样),固定限制实际上要好得多。

于 2010-11-24T15:41:14.860 回答