2015-06-29 6 views
1

Я работаю в компании, пишущей аудио плагины для различных программ, и в настоящее время у меня есть следующая проблема с 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

Это не помогло.

+0

Удаленный 'system (" ulimit -n 1024 ");' – accfews

+0

Да. Не работает. Я предполагаю, что вызвать его из приложения слишком поздно. Это не влияет на уже запущенный процесс. –

+0

Вы пытались проверить возвращаемое значение 'setrlimit'? (Я думаю, что есть опечатка в «setrlimit - это делать то же самое, что и setrlimit», но я не могу догадаться, что это такое.) – molbdnilo

ответ

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 (или функция).

 Смежные вопросы

  • Нет связанных вопросов^_^