У меня также были проблемы с недостаточным количеством доступных файловых дескрипторов. Установка NUM_FILES
на 50 или около того решила проблему. Ограничение связано с ядром VxWorks, которое статически выделяет таблицу файловых дескрипторов.
Насколько я знаю, изменение NUM_FILES
требует перекомпиляции ядра, так как это значение конфигурации ядра.
Вы можете подсчитать количество свободных файловых дескрипторов, скомпилировав и выполнив следующую функцию в оболочке VxWorks:
int countFreeFds(void)
{
int count = 0;
int i;
FILE *fd[100];
for (count = 0; count < 100; count++)
{
fd[count] = fopen("somefile", "r"); /* some any existing file */
if (fd[count] == NULL)
{
break;
}
}
for (i = (count - 1); i >= 0; i--)
{
fclose(fd[i]);
}
return (count);
}
Если вы сделаете это на только что запущенном VxWorks без дополнительных загруженных двоичных файлов или запущенных задач, значение, возвращаемое countFreeFds
, будет возвращать число, близкое к NUM_FILES
.
(также обратите внимание, что я не тестировал функцию выше, так как прямо сейчас у меня нет доступа к источнику, который я использовал несколько лет назад... вы также можете изменить код для использования вместо этого сокетов или каналов, но относительно бесплатные файловые дескрипторы не имеют значения)
person
Lukas Thomsen
schedule
06.07.2016