Я работаю в компании над написанием аудио плагинов для различных программ, и в настоящее время у меня возникает следующая проблема с Logic для 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 (или функция).