Я работаю в компании, пишущей аудио плагины для различных программ, и в настоящее время у меня есть следующая проблема с Logic на Os X Mavericks и Yosemite. Logic сканирует все наши плагины, и в какой-то момент он больше не может обращаться к файлам. ERRNO является 24, что означает "Слишком много открытых файлов"setrlimit не работает на OS X Maverick и Yosemite
Мы имеем следующие roows в нашем коде, что увеличение файлов доступных дескрипторов:
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, нет? Что я делаю неправильно?
P.S. Я также пробовал это решение: https://unix.stackexchange.com/questions/108174/how-to-persist-ulimit-settings-in-osx-mavericks
Это не помогло.
Удаленный 'system (" ulimit -n 1024 ");' – accfews
Да. Не работает. Я предполагаю, что вызвать его из приложения слишком поздно. Это не влияет на уже запущенный процесс. –
Вы пытались проверить возвращаемое значение 'setrlimit'? (Я думаю, что есть опечатка в «setrlimit - это делать то же самое, что и setrlimit», но я не могу догадаться, что это такое.) – molbdnilo