我在为各种程序编写音频插件的公司工作,目前在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错误(或功能)。

10-08 11:24