问一个有名管道的原子性读写的问题

发布于 2022-07-17 05:43:38 字数 371 浏览 18 评论 9

进程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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

孤芳又自赏 2022-07-26 20:17:40

采用connet (help u & me)的方法 问题解决了

罗罗贝儿 2022-07-26 20:17:36

原帖由 zymic 于 2006-8-24 14:47 发表
如果每次写入的数据少于PIPE_BUF的大小,那么就不会出现数据交叉的情况。但由于对写入的多少没有限制,而read()操作会读取尽可能多的数据,因此你不能知道数据到底是谁写入的。

PIPE_BUF的大小根据POSIX标准不 ...

没听说过pipe会使数据交叉

猫七 2022-07-26 20:04:34

如果每次写入的数据少于PIPE_BUF的大小,那么就不会出现数据交叉的情况。但由于对写入的多少没有限制,而read()操作会读取尽可能多的数据,因此你不能知道数据到底是谁写入的。

PIPE_BUF的大小根据POSIX标准不能小于512,一些系统里在<limits.h>中被定义,[译者注:Linux中不是,其值是4096。]这可以通过pathconf()或fpathconf() 对单独管道进行咨询得到。

半枫 2022-07-26 20:00:01

可以先写数据长度, 再写数据.
读时,先读长度(2或4字节), 再按长度读

可爱暴击 2022-07-26 12:22:47

文章看过了  好像用处不大

栖迟 2022-07-26 01:51:56

在linux分类里面搜fifo
出来的第一篇就是

清旖 2022-07-25 20:42:24

可以考虑用fread/fwrite

陌路终见情 2022-07-25 11:45:54

这里很多文章啊  能给个准确点的连接吗

爱,才寂寞 2022-07-17 10:40:08

http://www-128.ibm.com/developerworks/cn/ 上有篇文章详细说明这个,可以去参考下

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文