在我的系统(Ubuntu 13.10)上,值为FOPEN_MAX
为 16,值为_POSIX_OPEN_MAX
是 20,其值为_SC_OPEN_MAX
(我已经通过了sysconf()
)是 4096。我知道_POSIX_OPEN_MAX
是最小值OPEN_MAX
被定义为POSIX.1标准。所以在这里,真正的价值是_SC_OPEN_MAX
。另外,价值FOPEN_MAX
定义为ISO C。它们都称自己为同一件事:进程支持的最大打开文件数。
Question: 但为什么会有差异FOPEN_MAX
and _SC_OPEN_MAX
,以及当我写我的文章时我应该依赖什么?C应用?
提前致谢!
差异是因为一种是动态的,一种是静态的。如果您为 Ubuntu 系统编写软件,数字表明您将始终能够依赖 20 个打开的文件(POSIX 此处保证超过普通 C 的 16 个限制)。因此,理论上你可以有条件地编译一些东西来做一些疯狂的事情来解决下限,以确保该软件可以在具有相同标头的所有系统上运行。
运行时限制 _SC_OPEN_MAX 是实际的 fd 限制。在某些系统上它可能会更低,但不会低于 20(对于任何 POSIX 操作系统)。
最后,OPEN_MAX 是 _SC_OPEN_MAX 的特定于操作系统的下限(也就是说,_POSIX_OPEN_MAX 告诉您在任何 POSIX 系统上,OPEN_MAX 必须至少为 20)。 Linux 会将 OPEN_MAX 定义为更高的值,因此您可以依赖更多可用的 fd,并防止 _SC_OPEN_MAX 低于实际的 OPEN_MAX。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)