在Ubuntu 10.04上编译时未声明PATH_MAX

Joh*_*han 5 c limits ubuntu-10.04

我正在尝试在8.04版本的Ubuntu 10.04中编译一个C程序.它失败了,因为我们已经使用了PATH_MAX和应该定义的其他常量limits.h.根据各种资源,它应该是POSIX兼容的C库的一部分.

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

R..*_*R.. 7

POSIX将许多此类限制定义为可选.如果未定义限制FOO limits.h,则意味着系统可能没有此限制,或者限制可能在运行时或根据其应用的路径名而变化.在这些情况下,您可以使用pathconf,fpathconfsysconf功能和_PC_*_SC_*宏,如:

path_max = pathconf("/", _PC_PATH_MAX);
Run Code Online (Sandbox Code Playgroud)

要么:

page_size = sysconf(_SC_PAGE_SIZE);
Run Code Online (Sandbox Code Playgroud)

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

  • 我怀疑,它也是一种鼓励应用程序可移植到没有系统定义限制的系统的尝试,例如GNU HURD. (2认同)