我在为各种程序编写音频插件的公司工作,目前我在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
没有用。
答案 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'变量以获取错误代码