5
我想在Ubuntu 10.04中为8.04编译一个C程序。它失败了,因为我们使用了PATH_MAX
以及其他在limits.h
中定义的常量。根据各种资源,它应该是POSIX兼容C库的一部分。在Ubuntu 10.04上编译时没有声明PATH_MAX
这是Ubuntu 10.04中的错误还是有解决这个问题的正确方法?
我想在Ubuntu 10.04中为8.04编译一个C程序。它失败了,因为我们使用了PATH_MAX
以及其他在limits.h
中定义的常量。根据各种资源,它应该是POSIX兼容C库的一部分。在Ubuntu 10.04上编译时没有声明PATH_MAX
这是Ubuntu 10.04中的错误还是有解决这个问题的正确方法?
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限制),实际上具有固定限制要好得多。
另外,我怀疑,试图鼓励应用程序可移植到没有系统定义限制的系统,例如GNU HURD。 – caf 2010-11-25 02:21:31