当前位置:  技术问答>linux和unix

fifo open的问题

    来源: 互联网  发布时间:2016-05-25

    本文导语:     当O_NONBLOCK置位时,只读open立即返回。当只写open时,如果没有进程为读打开FIFO,则返回–1,并置errno值为ENXIO。    进程1和2通过fifo进行通信,1来读,2来写,在每个进程中mkfifo两个fifo,一个读,一个写。由于当...

   当O_NONBLOCK置位时,只读open立即返回。当只写open时,如果没有进程为读打开FIFO,则返回–1,并置errno值为ENXIO。
   进程1和2通过fifo进行通信,1来读,2来写,在每个进程中mkfifo两个fifo,一个读,一个写。由于当只写open时,如果没有进程为读打开FIFO,则返回–1,并置errno值为ENXIO。因此我通过让1先写一个命令到fifo,2从fifo读出此命令后写数据到fifo,然后1再来读取。现在的问题是,进程1一直在后台运行,2手动启动。当第一次1发命令给2的时候能读出正确数据,然后2终止。接着2重启,1再次发命令使2写新数据到fifo后读出的却是上次的数据,再发次命令读一次就可读出新数据。
   我想是不是因为“在读FIFO管道数据时,默认的是一次性读取PIPE_BUF个字节,当管道中数据多于PIPE_BUF个字节时,一次性读出PIPE_BUF-1个字节”。因此我想在每次查询前先清空fifo的数据,在每次1通知2写数据前,循环读出所有fifo中的数据,这是的只读open和read都不会阻塞吧?会不会影响后面的发命令读写fifo?

|
fifo的描述被设计成一个可以当成一个文件描述符来用,不知道为什么没有支持open的时候的O_TRUNC参数.看上去实现应该是很简单的了.可以试试open的时候加O_APPEND参数可不可以满足你的要求.
实在不行的话只有任务1启动的时候先打开fifo,然后循环读到读不出数据才通知任务2可以开始写数据.

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • FIFO一段小程序,无法读出FIFO。
  • apue上讲的 FIFOs
  • 十万火急==关于fifo读文件???
  • fifo
  • FIFO属于什么原语?
  • 重分求解,UNIX下的消息队列非常失败,经常发生堵塞现象,现改用FIFO,但FIFO又得自己设计消息,请高手指点
  • 关于unix下的fifo的疑问
  • 请问,FIFO的读写是否有字节数限制,PIPE_BUF如何使用?
  • <strong>*******FIFO 逐行读取 坐等大牛*******</strong>
  • tcp与fifo
  • 请问:FIFO文件能用mmap来使用吗?
  • 多个进程同时向fifo写不同的数据会有什么下场???
  • 请教一下各位高手,为什么fifo管道在线程内总是write失败?
  • 在cygwin中,用mknod()和mkfifo()不能创建fifo,为什么?
  • 请教:linux下的有名管道 fifo深度多大?
  • 进程间通信解决方案 MySQL-fifo-Plugin
  • 我写了一个虚拟命名管道(FIFO)的字符设备,如何使用呢?
  • 有名管道fifo什么时候创建,产生文件的属性
  • 如何用命名管道(FIFO)实现非阻塞模式进程间通讯(IPC)?
  • LINUX 下播放 DVD 全攻略 (关键字 DVD-ROM LiViD fifo OMS)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3