我正在尝试在8.04版本的Ubuntu 10.04中编译一个C程序。它失败了,因为我们使用了PATH_MAX
和其他应该在limits.h
中定义的常量。根据各种资源,它应该是POSIX兼容的C库的一部分。
这是Ubuntu 10.04中的错误还是有正确的解决方法?
答案 0 :(得分:7)
POSIX将许多此类限制定义为可选。如果limits.h
中未定义限制FOO,则表示系统可能没有此限制,或者限制可能在运行时或根据其应用的路径名而有所不同。在这些情况下,您使用pathconf
,fpathconf
或sysconf
函数以及_PC_*
和_SC_*
宏,如下所示:
path_max = pathconf("/", _PC_PATH_MAX);
或:
page_size = sysconf(_SC_PAGE_SIZE);
不幸的是,GNU(GNU C库)将许多限制定义为运行时变量,当它们在Linux上实际上是常量时,在某些情况下(在我看来,非常误导)希望有一天限制将被删除,应用程序将立即成为能够利用删除限制。但是,对于应用程序和内核的健壮性,只要它们足够大(具有Linux限制),实际上要有固定限制要好得多。