有关文件描述符的操作

guan323333 2010-05-27 03:40:54
小弟最近在试着存一些数据到硬盘里,于是用了以下的代码:

FILE *fp[3] ={0};
While(1)
{
获取src->enc_dev[i+1]->out_virt_buffer的数据;
for(i=0; i<3; i++)
{
if(NULL==fp[i]) //如果注释掉,在打印完第五个111111就会报错
{
sprintf(name[i],"%s%d.pckt","/",i+1);
fp[i] = fopen(name[i],"wb+");
printf("open%d:%s\n",i,name[i]);
}
if(NULL==fp[i])
{
printf("cif_thread:fopen error\n");
continue;
}
Printf(“11111111111111111 \n”);
length=fwrite(src->enc_dev[i+1]->out_virt_buffer,1,ret[i],fp[i]);
if(length!=ret[i])
{
perror("write error\n");
}

}
}

代码如上所示,原本的意思是先判断fp是否为空,如果是空的就打开文件,这样只要打开一次就可以了.问题出在第一次while循环好之后,当进行第二个while循环的时候,在for循环里当打印第五个111111 的时候报错了. 我试着把src->enc_dev[i+1]->out_virt_buffer 换成一个固定的"xxxx"字符串写进去的时候还是一样的结果,但是只要我把上面说明的那句判断注释掉就正常了。.. 这是为什么呢? 我怀疑是fp 在后续的操作中被修改了,但是不知道怎么判断fp有没有被修改,高手知道怎么查看fp里的内容吗?检查下fwrite前是不是还是原来的那个fp,我试过用%x %d 打印,结果都是一样的... 还有什么招吗 谢谢
...全文
97 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
woso 2010-06-02
  • 打赏
  • 举报
回复
这段代码没看出有什么问题,while里应该还干了别的不,不然while是干嘛的,另外FILE是标准IO,不是UNIX的fd
taiyang902 2010-06-01
  • 打赏
  • 举报
回复
给点出错的详细信息
howema 2010-05-31
  • 打赏
  • 举报
回复
fp是文件指针 就是一个地址吧
cceczjxy 2010-05-28
  • 打赏
  • 举报
回复
报错,报什么错啊,你需要描述的详细点
guan323333 2010-05-28
  • 打赏
  • 举报
回复
还有其他答案吗 或者谁告诉我怎么看FILE这个指针的内容啊.里面有些什么信息呢
Myth_cn 2010-05-27
  • 打赏
  • 举报
回复
如果fp的值没变的话,就应该不是文件描述符的问题.看的你程序似乎还是多线程的?建议从线程同步和指针操作找找问题

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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