我在为标准输入使用 FIFO 时遇到了一些麻烦。
我有一个这样的脚本:
#!/usr/bin/env ruby
while true do
data = gets
puts "Got: #{data}"
end
然后我像这样运行它:
$ ./script < input.fifo &
$ echo testdata > input.fifo
它将打印如下内容:
Got: testdata
Got:
Got:
Got:
Got:
Got:
etc.
我怀疑FIFO有问题。在将某些内容发送到脚本后,它并没有被清除。
我使用 scanf("%d" ...) 对具有类似输入循环的 C 程序尝试了相同的操作,它的行为如下:
$ echo 1 > input.fifo
Got: 1
Got: 1
Got: 1
Got: 1
etc.
所以看起来 FIFO 中的最后一个东西被卡在那里了。在 ruby 示例中,它是一个空行,因为 gets 捕获了 \n。第二个是 1 本身。
任何人都可以提供任何见解吗?
谢谢!