我在为各种程序编写音频插件的公司工作,目前在Os X Mavericks和优胜美地上使用Logic存在以下问题。
逻辑会扫描我们所有的插件,并且在某些时候它将无法再访问文件。 errno是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
然后我从WITHIN终端运行Logic,一切都很好,没有描述符问题!
现在,我以为setrlimit应该和setrlimit一样,不是吗?
我究竟做错了什么?
附言我也尝试了以下解决方案:
https://unix.stackexchange.com/questions/108174/how-to-persist-ulimit-settings-in-osx-mavericks
它没有帮助。
最佳答案
我最终在本文中找到了解决问题的方法:
http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/#Mac-OS-X
这也是解决方案(对于小牛,不是优胜美地):
https://unix.stackexchange.com/questions/108174/how-to-persist-ulimit-settings-in-osx-mavericks
但是,仍然不清楚为什么 setrlimit 失败。可能是OS X错误(或功能)。