アニメは休息中。代りにゲーム三昧です。ブログタイトルを「ゲームの達人」に変えようかな、なんて思っておりますが、カセットテープ版の「家出のドリッピー」でお世話になったシドニー・シェルダン先生の小説とかぶるので、やめておきます。面白いですゲーム。毎日がゲーム中心で回ってます。まあ、あまりゲームにのめり込むとゲームやるために会社休みそうな勢いですので、ゲームは一日8時間までと規制してます。
さて、デバッグ用のバイナリデータを作成するとき、コマンドラインが重宝しますが、一番よく使う値は、オール0やオール0xFFといった値のバイナリデータ。
「xxdで魔法のようにバイナリを生成する」でもやりましたが、方法は無限にありそうです。
今回は、前回使ったtruncateも含めて、バイナリデータ生成のコマンドの使いやすさを比較してみます。
まずはサイズを計算。100MByteのファイルを作りたいので1Byteで何Byteになるか換算します。計算機としてよく使うirb。
takk@deb9:~/tmp$ irb irb(main):001:0> 1024**2*100 => 104857600 irb(main):002:0> quit takk@deb9:~/tmp$
では、perlで生成。
takk@deb9:~/tmp$ time perl -e 'foreach(1..104857600){print chr 0}' > c.bin real 0m14.485s user 0m4.752s sys 0m0.048s takk@deb9:~/tmp$
標準入出力使うからか、すごく遅い。
次は標準的な方法、dd。
takk@deb9:~/tmp$ dd if=/dev/zero of=b.bin bs=1024 count=102400 102400+0 レコード入力 102400+0 レコード出力 104857600 bytes (105 MB, 100 MiB) copied, 0.364127 s, 288 MB/s takk@deb9:~/tmp$
先ほどが遅すぎたので、速い! って思いましたが、こんなもんでしょう。
ddの難点は、入力が長いところ。すぐ作りたいときに面倒です。
次は、truncate。
takk@deb9:~/tmp$ time truncate -s 104857600 c.bin real 0m0.002s user 0m0.000s sys 0m0.000s takk@deb9:~/tmp$
意外に速い。何より覚えやすい。
しかも、単位が指定できるので、使わない手はありません。
takk@deb9:~/tmp$ time truncate -s 100m d.bin real 0m0.002s user 0m0.000s sys 0m0.000s takk@deb9:~/tmp$
サイズもこのとおり正確です。当たり前ですが。
takk@deb9:~/tmp$ wc -c d.bin 104857600 d.bin takk@deb9:~/tmp$
各コマンドで生成されたバイナリデータは当然一致します。
takk@deb9:~/tmp$ cmp a.bin b.bin takk@deb9:~/tmp$ cmp b.bin c.bin takk@deb9:~/tmp$ cmp c.bin d.bin takk@deb9:~/tmp$
もちろん内容はオール0です。
takk@deb9:~/tmp$ od -tx1 -Ad a.bin 0000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 * 104857600 takk@deb9:~/tmp$
コメント