我刚注意到 limits.h中名为“_POSIX_ *”的宏(名称)类似于 sysconf 函数的参数。例如,有一个名为“_POSIX_ARG_MAX”的宏,我也可以使用“_SC_ARG_MAX”参数调用 sysconf 。当我们完全可以在limits.h中使用宏时,为什么我们首先需要 sysconf ?
答案 0 :(得分:1)
_POSIX_*
值是符合POSIX标准的最低要求。它们在所有平台上都具有相同的价值。实现支持的特定值可能更高。
来自man sysconf
:
对于变量或限制,通常有一个常量
_FOO
,可能在<limits.h>
或_POSIX_FOO
中定义,可能在<unistd.h>
中定义。如果未指定限制,则不会定义常量。如果定义了常量,则它会给出保证值,实际上可能支持更大的值。如果应用程序想要利用可能在系统之间更改的值,则可以调用sysconf()
。sysconf()
参数将为_SC_FOO
。
例如,_POSIX_ARG_MAX
为4096.但如果系统支持,sysconf(_SC_ARG_MAX)
可能会返回更大的数字。