LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 527|回复: 3

问一个关于FIFO的问题。

[复制链接]
发表于 2005-1-15 20:45:46 | 显示全部楼层 |阅读模式
用FIFO写了个两个进程传递数据的程序。 进程A 写FIFO, 进程B 读FIFO,
当进程A 写完退出后,为后 B 一直还能读到 A 写的最后一行数据?? 而且一直读下去。
按理说 A 读完后,管道中应该没有数据了呀,怎么回事呢???
发表于 2005-1-16 09:04:07 | 显示全部楼层
FIFO是由操作系统管理的,操作系统有自己的缓冲区,在写进程退出后,还可以暂时保存没有被读取的数据。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-1-16 13:12:23 | 显示全部楼层
可是,我的读进程一直在读啊,读到的一直是写进程写入的最后一行。写进程退出后,似乎最后的缓冲一直保留着。我现在只能在读进程中把FIFO的fd关掉再打开,才能停止一直读出数据。 怎么回事呢??
回复 支持 反对

使用道具 举报

发表于 2005-1-16 15:25:28 | 显示全部楼层
你可以自己做个试验,就象下面那样:

  1. bash-2.05b$ mkfifo vvfifo
  2. bash-2.05b$ ls
  3. LumaQQ  doc  myproject  program  tex  tmp  vvfifo  wallpaper  write_os
  4. bash-2.05b$ cat < vvfifo &
  5. [1] 6271
  6. bash-2.05b$ echo "dsae" > vvfifo
  7. bash-2.05b$ dsae

  8. [1]+  Done                    cat <vvfifo
复制代码

你可以看到,操作系统会自己协调输入输出。但都不会发生重复输入和重复输出的事。
我估计是你写的代码有问题。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表