setrlimit在OS X Maverick和Yosemite上不起作用

时间:2015-06-29 12:29:47

标签: c++ limit osx-mavericks osx-yosemite ulimit

我在为各种程序编写音频插件的公司工作,目前我在Os X Mavericks和Yosemite上的Logic存在以下问题。 Logic会扫描我们所有的插件,并且在某些时候它无法再访问这些文件。错误是24,意思是“太多打开文件”

我们的代码中有以下代码,可以增加可用的文件描述符:

struct rlimit limit;
if (::getrlimit(RLIMIT_NOFILE, &limit) == 0)
{
    limit.rlim_cur = (in_maxOpenFiles);
    setrlimit(RLIMIT_NOFILE, &SetLimit);
}

我也尝试过:

struct rlimit limit;
if (::getrlimit(RLIMIT_NOFILE, &limit) == 0)
{
    limit.rlim_cur = (in_maxOpenFiles);
    limit.rlim_max = (in_maxOpenFiles);
    setrlimit(RLIMIT_NOFILE, &SetLimit);
}

但它没有帮助。 有趣的是,如果我打开终端,并运行以下命令:

ulimit -n 1024

然后我从终端运行Logic,一切都很好,没有描述符问题!!

现在,我认为setrlimit假设与setrlimit一样,不是吗? 我做错了什么?

P.S。我也试过这个解决方案: https://unix.stackexchange.com/questions/108174/how-to-persist-ulimit-settings-in-osx-mavericks

没有用。

2 个答案:

答案 0 :(得分:0)

我最终在本文中找到了解决问题的方法: http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/#Mac-OS-X

这也是解决方案(对于Maverick,而不是Yosemite): https://unix.stackexchange.com/questions/108174/how-to-persist-ulimit-settings-in-osx-mavericks

然而,仍然不清楚为什么 setrlimit 失败。可能是OS X bug(或功能)。

答案 1 :(得分:-1)

如果没有第3方软件在w / ulimit,launchctl limit maxfiles之类的混乱情况下,上述代码(第1个变体)不会失败。重新启动Mac,然后重试。

P.S。我们不要繁衍这样的软件 P.P.S检查'errno'变量以获取错误代码