问题:Vxworks下Fopen和Open打开文件问题,连续多次打开关闭文件50次以上时就失败了?
Main()
{
While(1)
{
If(Open(F.Txt)打开文件成功)
{
//Dosomething;
Close()//关闭该文件
}
Else
{
Printf("打开出错");
}
}
}
上述伪代码实现的测试程序在Vxworks下运行时,当循环次数在50多次时就开始报打开文件出错了(而在我实际程序中只打开20次它就报错了),如果我在Colse()调用后面加上Sleep(1),且至少是一秒时,程序就可以一直循环下去,不会报打开文件错误了(但这样的话实时需求无法满足)。 并且当我换成非系统调用函数Fopen()和Fclose()时也会出现相同问题。
我怀疑是Vx下设置了最大打开文件句柄数Maxnum(Close()并未将文件关闭),能否定制内核改变Maxnum呢,请高手指教!
有资料说函数DosFsInit()可以修改该Maxnum,是否正确? 有没有方法可以让Colse或者Fclose在用户调用后马上就执行(真是的释放掉句柄资源)?
答:
Vxworks的Project中Operating System Components->IO System Components->IO System,将参数NUM_FILES由默认的50改大点就行了,比如改成500.如果不用Tornado或者Workbench的GUI界面配置,也可以修改宏NUM_FILES的值。但是推荐用GUI界面去修改。 |