ゼロ埋め立て2008年10月24日 22時59分15秒

古いファイルを整頓していたら出てきたプログラム。Windows のパーティションをゼロで埋めて、UNIX から dd をやった後の圧縮率を上げるために書いたプログラム。

ごく普通の C プログラムで、Windows 特有のコードは無い。しかし、UNIX の様に /dev/zero などが無いので、プログラムを書いた。

しかし、Windows 用のプログラミング環境は無かったので、学校に行ってプログラムを生成した記憶がある。手元にこのプログラムがあっても邪魔だが、記念にこちらに残しておくことにした。


#include <stdlib.h>
#include <stdio.h>

#define SIZE 1024 * 1024

int main()
{
        int i = 0;
        char buf[SIZE];
        FILE *fd;

        memset(buf, 0, sizeof(buf));
        if((fd = fopen("zero.txt", "w")) == NULL)
                return -1;

        for(i = sizeof(buf); i > 0; i >>= 1)
        {
                printf("%d ", i);
                fflush(stdout);
                while(fwrite(buf, i, 1, fd) > 0);
        }
        return 0;
}

1MB 毎にファイルに書き込むだけの単純な物だ。1MB の書き込みに失敗すると、段々とバッファの大きさを半分にして試している。最後に中途半端に余った部分を埋める為の工夫だろう。

まだまだ若かった。while(fwrite(buf, 1, sizeof(buf), fd) != sizeof(buf)); とすれば、わざわざ自分でバッファの大きさを小さくしていく必要も無かっただろうに。