c++ - setrlimit 不适用于 OS X Maverick 和 Yosemite

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

我在为各种程序编写音频插件的公司工作,目前我在 Os X Mavericks 和 Yosemite 上遇到以下逻辑问题。 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

然后我从终端内运行逻辑,一切正常,没有描述符问题!!

现在,我认为 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

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

但是,目前还不清楚为什么 setrlimit 会失败。可能是 OS X 错误(或功能)。

关于c++ - setrlimit 不适用于 OS X Maverick 和 Yosemite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31115764/

相关文章:

c++ - 使用生成器和分布扩展 c++11 random 的教程或示例代码

c++ - 使用 CMake 创建 Visual Studio "Custom Build Step"

php - 多 cURL 5000 个 URL

cucumber - 在 Maverick 上安装 Cucumber 时出错

macos - 配置: error: C compiler cannot create executables with Mavericks

c++ - 针对不同版本的 .dll 的 .lib 进行链接可能产生的副作用是什么?

c++ - 使用链表 C++ 添加 2 个多项式表达式

Wix:如何限制对主要版本号的主要升级?

mysql - 如何在 hibernate 中使用 LIMIT 进行更新查询?

python - 安装枕头错误