From: Nobuyoshi Nakada Date: 2008-02-14T00:28:50+09:00 Subject: [ruby-list:44624] Re: CGIからCのプログラムを実行する <再送 なかだです。 At Wed, 13 Feb 2008 22:42:59 +0900, jtjrb049@yahoo.co.jp wrote in [ruby-list:44623]: > rubyのCGIからCのプログラムを実行して結果を取得するため、以下のように > popenを使って、別プログラムへの入出力を取得しています。しかし、 2度目以 > 降のアクセスがくると下記のようなエラーが発生してしまいます。(参照:[表 > 示されるエラー]) > アクセスのたびに別プログラムを起動するようにすれば、このエラーは発生しな > いと思うのですが、別のプログラムが非常に大きなデータをロードするため、ア > クセスがあるたびにロードすることは避けたいのです。 > 1度だけのpopenで取得できた入出力のオブジェクトを、2度目以降のアクセスの > たびに再オープンして使いまわすことはできないのでしょうか? 一度閉じたパイプを開き直す方法はありません。 この別プログラムというのは改造できるのでしょうか。もしできるのな ら、一行読むごとに処理して、出力にはデータの終わりがわかるように すればできると思います。 たとえば、別プログラムを一回の出力の終わりを示すマークとして Ctrl-Dをつけるように改造するなら class ParseServlet < HTTPServlet::AbstractServlet TERM = "\C-d" def do_POST(req, res) $io.puts req.query['input'] if s = $io.gets(TERM) s.chomp!(TERM) res.body = s res['Content-Type'] = "text/plain" end end end -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦