我正在尝试在为 8.04 制作的 Ubuntu 10.04 中编译 C 程序。它失败了,因为我们使用PATH_MAX
了和其他应该在limits.h
. 根据各种资源,它应该是与 POSIX 兼容的 C 库的一部分。
这是 Ubuntu 10.04 中的错误还是有解决此问题的正确方法?
我正在尝试在为 8.04 制作的 Ubuntu 10.04 中编译 C 程序。它失败了,因为我们使用PATH_MAX
了和其他应该在limits.h
. 根据各种资源,它应该是与 POSIX 兼容的 C 库的一部分。
这是 Ubuntu 10.04 中的错误还是有解决此问题的正确方法?
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 的限制一样),固定限制实际上要好得多。