VXWORKS 模拟器限制?

VXWORKS simulator limits?

我目前正在 VxWorks 下移植代码。所以我使用模拟器来验证更改。 此代码需要打开许多管道和套接字。我在打开这些文件描述符时遇到问题。确实,我可以打开 17 个文件描述符(套接字或管道导致相同的错误)但是下面 return 错误 "EMFILE: too many opened files"。 在网上研究了一下,我修改了全局变量NUM_FILES,但是这个修改没有效果。 你知道这是否是限制同时打开的文件描述符数量的模拟器吗?

感谢您的帮助

我也遇到过可用文件描述符不足的问题。将 NUM_FILES 设置为 50 左右解决了问题。限制在静态分配文件描述符 table.

的 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 编辑的值 return 将 return 接近 [=11 的数字=].

(另请注意,我还没有测试上面的功能,因为现在我无法访问我几年前使用过的源...您可能还想修改代码以使用套接字或管道,但关于自由文件描述符没有区别)

我找到问题了

我不得不修改 RTP_FD_NUM_MAX 这是一个特定的 RTP 值