stdin に 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 をキャプチャするため、空行です。2 番目は 1 そのものです。
誰でも洞察を提供できますか?
ありがとう!