« ありがちに | トップページ | 文字列検索コマンドfindの限界 »

2009年8月20日 (木)

gzip話

会社で、gzipを使ったバッチファイルを書こうと思って調べてました。
compressもそうなんですけど、元のファイルが消えちゃうんですよね。や、「いまだにcompressなんて使ってんの?」とか思った人、前々からのバッチファイルを引き継ぎ引き継ぎ、コピペで生産していくと今でも結構主流だったりします。互換性とか運用上とかの理由がなければgzipにしますかー、って感じで、新しいシステムはgzipが多いかもしれないけどそういう話題にならなかったシステムは新しくてもcompressだったりするかも。
話戻して。元のファイルが残ってないとちょっとやりにくいなぁと思うことがあったので、まぁバックアップ処理なんですが、使う前にバックアップして圧縮しておきたいんですがそん時にファイルが無くなってしまっては業務処理に使えなくなるじゃんという話。
んでそういうオプションでもないかなぁと思って調べてたら、無いんですね。
いや、できる。できるんだけど、標準出力に出させてそれを別ファイル名にリダイレクト、という形。-cオプションで標準出力に出力。

入力例:gzip -c [file] > [file].gz

ふーん。ってことは、いつもの動作としては 圧縮→同じファイル名に書き出し→.gzにリネーム、ってやってるんでしょうかねぇ。ふーん。
なーんか標準出力通すのって嫌なんだよなぁ。なんとなく、画面に出力するイメージから、テキストデータならともかくバイナリデータって大丈夫なのかよ、という思いがある。まぁ大丈夫なんでしょうけど。

で、そんなのを調べてたら、2GB 問題って話が出てきた。
http://x68000.q-e-d.net/~68user/unix/pickup?gzip
gzip 1.2.4 とかでは、「ファイルオフセットが 32bit な環境で make すると、ファイルオフセットが 32bit な gzip が生成され、2GB 超のファイルを扱うことができない」ということらしい。
2GB越えって今回は可能性のあるものなので、これも気になった。
解決策としては「コンパイル時に -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE というオプションを付けてコンパイルすればファイルオフセットが 64bit になることが多いようだ」らしい。

ファイルオフセットが32bitか64bitかを調べるプログラムも載っていた。ので試してみる。

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
main(){
    printf("%d\n", sizeof(off_t));
}


見ての通りC言語なので、gccでコンパイル。‥‥と思ったら、HP-UXなんですが B.11.31 ってバージョンらしい、gcc入ってないのな。まぁ商用UNIXだとGNU系は入ってないこともってのは聞いたことがあるので、代わりのもの‥‥そうかccでいいのか、ということでコンパイル。
実行。4。つまり32bit‥‥ ログイン時のバージョン表示でも ia64 とかって出てるのに、32ビットですかそうですか。

ちなみに「gzip-1.3.3 の configure は少し賢くて、64bit ファイルポインタが使える場合は上記オプションを勝手に追加してコンパイルしてくれるため、2GB 問題は起こらないだろう。」ともあったので、gzipのバージョンを確認。 gzip -V とやると、gzip 1.3.5 と出ました。んー、大丈夫なのかなぁ。
まぁ不具合出るまでは放っておくか。つって僕は本来の担当ではないんで、この件で問題起こってもきっと僕まで話回ってこないでしょうけどー。

さらにちなみに、別のところに載っていた、2GBを超えるファイルの圧縮と展開。
http://europe.ciao.jp/unix/gzip/index.html
圧縮:cat fileA | gzip > fileA.gz
展開:cat fileA.gz | gzip -d > fileA

catかよ!catも基本、標準入出力を扱うのでバイナリはー、ってイメージあるんだよなー。まぁ大丈夫なんでしょうけど。


2012/09/23に書きました。

« ありがちに | トップページ | 文字列検索コマンドfindの限界 »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: gzip話:

« ありがちに | トップページ | 文字列検索コマンドfindの限界 »

AmazonSearch


最近のトラックバック

無料ブログはココログ