问一个有名管道的原子性读写的问题
进程1 :获取了视频帧数据,然后就不断的往一个fifo里写进去视频帧
进程2:从fifo里读取视频帧数据,写成视频文件。
问题
进程1 :是否只要保证写进去的帧不大于PIPE_BUF就能保证原子性
进程2 :
..........
if ( read(fd,buf,FSIZE) < 0) //这里的FSIZE应该如何取值,才能保证从fifo里取到的是完整的帧
printf("message read failed!");
framesize=sizeof(buf);
AVI_write_frame(avifile, buf, (long)framesize,0);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
采用connet (help u & me)的方法 问题解决了
没听说过pipe会使数据交叉
如果每次写入的数据少于PIPE_BUF的大小,那么就不会出现数据交叉的情况。但由于对写入的多少没有限制,而read()操作会读取尽可能多的数据,因此你不能知道数据到底是谁写入的。
PIPE_BUF的大小根据POSIX标准不能小于512,一些系统里在<limits.h>中被定义,[译者注:Linux中不是,其值是4096。]这可以通过pathconf()或fpathconf() 对单独管道进行咨询得到。
可以先写数据长度, 再写数据.
读时,先读长度(2或4字节), 再按长度读
文章看过了 好像用处不大
在linux分类里面搜fifo
出来的第一篇就是
可以考虑用fread/fwrite
这里很多文章啊 能给个准确点的连接吗
http://www-128.ibm.com/developerworks/cn/ 上有篇文章详细说明这个,可以去参考下