山本です。

>気になってるのは、close_write(とclose_read)の処理なのですが、
>データが蒸発するようなら教えてくださると嬉しいです。

VisualC++6 では __declspec(align(4)) のコンパイルが通らなかったので、
bcc32 で試してみたのですが、

IO.popen('./ruby.exe', 'r+') do |io|

  io.write %q{
    p 1
    print 'xy'
  }

  io.close_write

  while c = io.read(1) # freeze
    p c
    p io.eof?
  end

end

で io.read で固まってしまいます。