我目前正致力于在VxWorks下移植代码。所以我使用模拟器来验证变化。 此代码需要打开许多管道和插槽。我打开这些文件描述符时遇到问题。实际上,我可以打开17个文件描述符(套接字或管道导致相同的错误),但以下返回错误" EMFILE:太多打开的文件"。 在对网络进行一些研究后,我修改了全局变量NUM_FILES,但这种变化没有效果。 你知道这是否是限制同时打开的文件描述符数量的模拟器?
感谢您的帮助
答案 0 :(得分:2)
我也遇到了文件描述符不足的问题。将NUM_FILES
设置为50左右可以解决问题。限制在静态分配文件描述符表的VxWorks内核中。
据我所知,更改NUM_FILES
需要重新编译内核,因为它是内核配置值。
您可以通过在VxWorks shell上编译和执行以下函数来计算空闲文件描述符的数量:
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
的数字。
(另请注意,我现在还没有对上述功能进行过测试,因为我现在还无法访问我几年前使用的来源...你可能还想修改代码使用套接字或管道,但有关免费文件描述符,它没有区别)
答案 1 :(得分:2)
我发现了问题
我不得不修改RTP_FD_NUM_MAX 这是一个特定的RTP值