vxworks下fopen和open打开文件问题,连续多次打开关闭文件50次以上时就失败了

swayer 2008-10-19 07:27:15
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在用户调用后马上就执行(真是的释放掉句柄资源)?
...全文
926 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
thomascatlee 2008-11-03
  • 打赏
  • 举报
回复
vxWorks要重新下载到目标机上,而不是downloadable的模块
swayer 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 frank_zhou 的回复:]
vxworks的project中operating system components->IO system components->IO system,将参数NUM_FILES由默认的50改大点就行了,比如改成500
[/Quote]

我修改了这个两个属性值,重新编译了vx,重启了系统,编译了测试程序然后download后执行还是出错,是不是我修改的属性并没有导到目标机上呢,我试过了3台目标机都没有把问题解决,不知道为什么了
土豆 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 frank_zhou 的回复:]
vxworks的project中operating system components->IO system components->IO system,将参数NUM_FILES由默认的50改大点就行了,比如改成500
[/Quote]
顶,正解。如果不用tornado或者workbench的GUI界面配置,也可以修改宏NUM_FILES的值。但是推荐用GUI界面去修改。
thomascatlee 2008-10-22
  • 打赏
  • 举报
回复
这个参数也影响同时打开的socket数量
frank_zhou 2008-10-21
  • 打赏
  • 举报
回复
vxworks的project中operating system components->IO system components->IO system,将参数NUM_FILES由默认的50改大点就行了,比如改成500
coolwysergmail 2008-10-21
  • 打赏
  • 举报
回复
以前系统老是死,结果是打开n多串口,iosFdshow加devs看看。
开串口也这样测试过,到了50个就挂了。
cool_ice1020 2008-10-20
  • 打赏
  • 举报
回复
是这样的,在定制系统时候,会设置文件系统最多同时可以打开的文件数,一般都设置为50,即同时可以打开50个文件,如何超过就会报错。
按你上么讲的情况,应该是在关闭时又打开了文件即系统还没有处理完关闭文件操作,所以通过sleep延时就可以解决。你可以通过修改BSP,修改
最多可以同时打开文件的数量。

2,179

社区成员

发帖
与我相关
我的任务
社区描述
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
  • VxWorks开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧