[ruby-list:49616] Re: IO.popen の不審な挙動を再現するサンプルコード

From: 尾川敏也 <ogw@...>
Date: 2013-09-29 01:26:15 UTC
List: ruby-list #49616
尾川です。

コメントありがとうございました。

中田さん wrote:
> これはrubyのバグです。できれば、trunkでも試してみてください。

そうでしたか。事態がはっきりして、少しほっとしました。

実は trunk というのは何のことか判らなかったのですが、"Ruby trunk" 
でググッて見つけた

    https://www.ruby-lang.org/en/community/ruby-core/

を参考にして、

    svn co http://svn.ruby-lang.org/repos/ruby/branches/ruby_2_0_0

でソースを取り込み arton さんの 「Ruby 環境構築講座 Windows 編」を
参考にして bison と sed を入れてビルドしました。

OS は Windows XP で、ruby -v の結果は
前回: ruby 2.0.0p247 (2013-06-27 revision 41674) [i386-mswin32_100]
今回: ruby 2.0.0p322 (2013-09-28) [i386-mswin32_100]

です。

もしもコメント頂いた趣旨と違うようでしたら、正しい方法を教えて頂け
ればトライし直してみたいと思います。


以下は、上記のようにビルドしなおした(多分)最新版で、昨日と同じよう
なテストをしてみた結果です。

IO.popen を使って、外部コマンドは C で書いたものを使っています。

まず、データの行数が 3000 行のときの結果は:

    ----------- 11 / 100 ---------
    ----------- 12 / 100 ---------
    ----------- 13 / 100 ---------
    ----------- 14 / 100 ---------
    external: too less field (3 for 6) at line 2784
    ----------- 15 / 100 ---------
    ----------- 16 / 100 ---------
    external: too less field (3 for 6) at line 2784
    ----------- 17 / 100 ---------
    external: too less field (3 for 6) at line 2784
    ----------- 18 / 100 ---------
    ----------- 19 / 100 ---------
    ----------- 20 / 100 ---------
    
    (同じ調子で、最後の 100 / 100 まで実行)

でした。

次に、データの行数を 4000 行に変更しました。昨日の例では、[BUG] segmentation
fault と表示された条件です。

    ----------- 26 / 100 ---------
    ----------- 27 / 100 ---------
    ----------- 28 / 100 ---------
    ----------- 29 / 100 ---------
    ----------- 30 / 100 ---------
    ----------- 31 / 100 ---------
    external: too less field (5 for 6) at line 79
    C:/ogw/ruby/use_iopopen.rb:6:in `close_write': closed stream (IOError)
            from C:/ogw/ruby/use_iopopen.rb:6:in `block (2 levels) in |'
    
    (ここで終了)

という結果でした。

どうやら、最新版でも状況は変わっていないように見えます。

以上です。


-- 
尾川敏也 ogw@shizuokanet.ne.jp
http://www6.shizuokanet.ne.jp/ogw/

In This Thread