読者です 読者をやめる 読者になる 読者になる

C言語の外部コマンドへの入出力がよくわからない

Ruby 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でファイル作らずともあっさり出来るよ〜みたいな情報

もうわからん。