No.14977![]() |
popenでgzipを使用する場合 投稿者---Jum(2004/06/25 16:07:23) |
||
お世話になります。Jumです。 pG = popen( "gzip -9 -c" , "w" ); として、データを圧縮する場合の事なのですが、圧縮されるタイミングがわかりません。 fputs( "長い文字列" , pG ); とする場合に、 fputs で出力された時点で、出力分だけ圧縮されるのか、または popen の バッファリングによって fputs( "長い文字列を分割したもの1" , pG ); fputs( "長い文字列を分割したもの2" , pG ); fputs( "長い文字列を分割したもの3" , pG ); とした場合にでも同じ結果になるのかを知りたいのです。 バッファリングされることから考えると pclose( pG ); とした時に圧縮が開始されるような気もしますが… 以上宜しくお願い致します。 |
No.14991![]() |
Re:popenでgzipを使用する場合 投稿者---tetrapod(2004/06/25 19:15:32) |
||
いつ圧縮がかかるかは gzip の内部のコード次第でしょう。 あるいは送るデータ次第というか。 そんなことを気にしていてはプログラムは書けません。 真のパイプが実装されている OS の場合 (Unix 等) パイプに送った内容は随時パイプの先に届くので、随時圧縮される。 ニセパイプしかない OS の場合 (pure MS-DOS 等) pclose したときにパイプ先に届くので、そこまで遅延される。 としか言いようが無いなぁ。 出力が始まるタイミングが pclose まで遅延されるかどうか、 くらいなら気にする価値があるかもしれませんが。 |
No.15002![]() |
Re:popenでgzipを使用する場合 投稿者---Jum(2004/06/26 00:02:02) |
||
ご回答ありがとうございます。 >パイプに送った内容は随時パイプの先に届くので、随時圧縮される。 >pclose したときにパイプ先に届くので、そこまで遅延される。 この違いなのですが、随時圧縮というのが fputs( "長い文字列を分割した物1" , pG ); 圧縮 fputs( "長い文字列を分割した物2" , pG ); 圧縮 fputs( "長い文字列を分割した物3" , pG ); 圧縮 となるのか fputs( "長い文字列を分割した物1" , pG ); fputs( "長い文字列を分割した物2" , pG ); fputs( "長い文字列を分割した物3" , pG ); まとめて圧縮 となるのかで、出来上がるデータが変わると思うのです。 このタイミングを知りたかったのです。 fputs毎に随時圧縮した場合、圧縮率も下がると思いますし… その辺で悩んでいるというわけなのです… 以上宜しくお願いいたします。 |
No.15003![]() |
Re:popenでgzipを使用する場合 投稿者---επιστημη(2004/06/26 00:05:02) |
||
>fputs毎に随時圧縮した場合、圧縮率も下がると思いますし… >その辺で悩んでいるというわけなのです… やってみたらええやんか。と思う。 |
No.15004![]() |
Re:popenでgzipを使用する場合 投稿者---Jum(2004/06/26 00:32:28) |
||
確かに仰るとおりですね。 ということで試してみました。 (と言っても何回か試してはいましたが…) 結果としては、20文字程度の文字を分割してgzipに送り込みましたが 圧縮サイズは同じですが2バイトの相違がありました。 何種類か試した文字列が悪かったのか、同データができあがった場合や 違うデータができた場合があったので、タイミングか?と思ってしまい 質問させていただきました。 分割圧縮と全圧縮では異なることがわかりました。 ありがとうございました。 |
No.15026![]() |
Re:popenでgzipを使用する場合 投稿者---tetrapod(2004/06/28 10:49:20) |
||
>圧縮サイズは同じですが2バイトの相違がありました。 そりゃ当然。 gzip のファイルフォーマット資料を見ましたか? そこは圧縮元ファイルの日付が入っているところのはずです。 同一データを同一 gzip に与える限り「圧縮されたデータそのものは」 同一になります。(その他周辺データは異なるでしょう) fputs("abc\nabc\n",f); と fputs("abc\n", f); x2 とで 生成されるファイルの内容が違ったらとんでもないことになりますわい。 # ファイルの日付が違ったら違うファイルぢゃん、ということならば、 # それもまたむべなるかな。 |