C 在Ubuntu 10.04上编译时未声明路径_MAX

C 在Ubuntu 10.04上编译时未声明路径_MAX,c,ubuntu-10.04,limits,C,Ubuntu 10.04,Limits,我正试图在Ubuntu 10.04中编译一个C程序,该程序是为8.04编写的。它失败是因为我们使用了PATH\u MAX和其他应在limits.h中定义的常量。根据各种资源,它应该是与POSIX兼容的C库的一部分 这是Ubuntu10.04中的一个bug,还是有一个合适的方法来解决这个问题?POSIX将许多这样的限制定义为可选的。如果未在limits.h中定义限制FOO,则表示系统可能没有此类限制,或者限制可能在运行时发生变化,或者取决于其应用的路径名。在这些情况下,可以使用pathconf、f

我正试图在Ubuntu 10.04中编译一个C程序,该程序是为8.04编写的。它失败是因为我们使用了
PATH\u MAX
和其他应在
limits.h
中定义的常量。根据各种资源,它应该是与POSIX兼容的C库的一部分


这是Ubuntu10.04中的一个bug,还是有一个合适的方法来解决这个问题?

POSIX将许多这样的限制定义为可选的。如果未在
limits.h
中定义限制FOO,则表示系统可能没有此类限制,或者限制可能在运行时发生变化,或者取决于其应用的路径名。在这些情况下,可以使用
pathconf
fpathconf
sysconf
函数以及
\u PC*
\u SC*
宏,如下所示:

path_max = pathconf("/", _PC_PATH_MAX);
或:


不幸的是,GNU(GNUC库)将许多限制定义为运行时变量,而在Linux上它们实际上是常量,在一些人看来(我认为,这是非常错误的),他们希望有一天这些限制会被删除,应用程序将能够立即利用这些限制的删除。然而,对于应用程序和内核的健壮性来说,只要有足够大的限制(就像Linux限制一样),实际上最好有固定的限制。

我怀疑,这也是一种鼓励应用程序移植到没有系统定义限制的系统的尝试,比如GNU赫德。@caf:我想你已经准确地找到了原因。你也可以在
linux/limits.h
page_size = sysconf(_SC_PAGE_SIZE);