烦请各位帮我看看这段简单的代码居然有n多的错误啊,在线等待,很急.............

linqzly 2007-12-21 04:00:00

//sockfd是一个套接字描述符
//filename是文件名
dout = fdopen(sockfd, "w+b");
fin = fopen(filename, "r+b");
while ((c = fread(buf, sizeof(char), sizeof (buf), fin)) > 0) {
bytes += c;
bufp = buf;
while(c > 0){
d = fwrite(bufp, sizeof(char), c, dout);
if (d < 0){
if (EAGAIN == errno || EINTR == errno){
continue;
}
break;
}
c -= d;
bufp += d;
}
}

以上读的文件是好几个进程共享的,也就是这文件其他的进程也会读到,但是绝对都是以"r+b"模式打开的,所以应该是共享读的.但是现在是这段代码,有那么小部分的概率(大多数时候没有问题)要么堵塞在fread操作,要么fwrite的时候报错EBADF, 请各位帮忙想想究竟怎么回事呢?我已经想破脑袋了.
...全文
82 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
linqzly 2007-12-26
  • 打赏
  • 举报
回复
楼上的能够说的明白些吗?怎么样处理?处理锁吗?
yunhappy 2007-12-26
  • 打赏
  • 举报
回复
用 fcntl 处理下试试
linqzly 2007-12-26
  • 打赏
  • 举报
回复
1、"r+b"不是以二进制读打开吗?
2、buf定义的时候是数组。
有没有可能是因为文件锁的问题?但是读锁是共享的啊,还请高手指点,错误会出在哪里?
littlefirebug 2007-12-24
  • 打赏
  • 举报
回复
1."r+b"是以读和写的方式打开的.
2.buf定义的时候是数组还是指针?
linqzly 2007-12-24
  • 打赏
  • 举报
回复
真没有人碰到过这样的问题吗?
linqzly 2007-12-21
  • 打赏
  • 举报
回复
不好意思,忘了说了,读的文件是jpg文件

23,125

社区成员

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

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