我正在尝试在 Ubuntu 10.04 中为 8.04 编译 C 程序。它失败了,因为我们已经使用了PATH_MAX
以及其他应该定义的常量limits.h
。根据各种资源,它应该是 POSIX 兼容 C 库的一部分。
这是 Ubuntu 10.04 中的错误还是有解决此问题的正确方法?
POSIX 定义了许多这样的限制是可选的。如果限制 FOO 没有定义在limits.h
,这意味着系统可能没有这样的限制,或者限制可能会在运行时发生变化,或者取决于它所应用的路径名。在这些情况下,您可以使用pathconf
, fpathconf
, or sysconf
功能和_PC_*
and _SC_*
宏,如:
path_max = pathconf("/", _PC_PATH_MAX);
or:
page_size = sysconf(_SC_PAGE_SIZE);
不幸的是,GNU(GNU C 库)将许多限制定义为运行时变量,而实际上它们在 Linux 上是恒定的,在某些人(在我看来,这是非常误导的)希望有一天这些限制将被删除,应用程序将立即能够采取消除限制的优点。然而,对于应用程序和内核的鲁棒性来说,只要它们足够大(如 Linux 限制),设置固定限制实际上会更好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)