首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Vxworks下Fopen和Open打开文件问题

Vxworks下Fopen和Open打开文件问题

问题: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界面去修改。
返回列表