2008年2月14日

[ruby-list:44624] Re: CGIからCのプログラムを実行する <再送

なかだです。

At Wed, 13 Feb 2008 22:42:59 +0900,
jtjrb049@xxxxx 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はできる。
中田 伸悦

投稿者 xml-rpc : 2008年2月14日 00:28
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/69710
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。