C言語の外部コマンドへの入出力がよくわからない
とりあえず、現状で必要なのはgzip圧縮されたデータを受信して、展開したいだけ。 あっさりzlibライブラリで解決するかと思いきや、 zlibを読んだ感じでは、gzipはファイル化しなけりゃならないっぽい。 ファイル化とか面倒だと思ってgunzip -cに吸い込ませた結果を 読みこめばいいかとRubyのOpen3感覚で思っていたらハマってしまった。
とりあえず、やりたかったことをRubyで書いた。
gzipdata = open(ARGV[0], "rb").read # やりたいことは、gzip圧縮されたデータを展開したいだけ pipe = IO.popen("gunzip -c", "r+") pipe.write gzipdata pipe.close_write data = pipe.read pipe.close # 結果の出力 result_file = open("result.jpg", "wb") result_file.write data result_file.close
これ、C言語でやろうとするとめんどくさい。 ネットなどで検索すると、pipeを作ってforkしろと書いてある。 プロセス複製とかしなきゃならんのか〜とか思ってちょっと萎える。
もう、gzipデータをRubyプログラムに丸っとパイプかドメインソケットで渡して そっちで処理してくれというプログラムにしちまうか。。
というわけで、誰か偉い人教えて下さい。
- Cでforkせずともできるものなのか
- Cではforkするのが常識なのか
- そもそも何か間違っているのか
- zlibでファイル作らずともあっさり出来るよ〜みたいな情報
もうわからん。