いやな日記を見て。 1Octetずつwriteすることによってカウンターの動作を実現している実装は知っていたんだけど
lseekを使うと中間の書き込まなかった領域は実際はHDDに記録されないよなあ…と以下のようなプログラムで実験してみた。
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd;
fd = open("/tmp/tako", O_WRONLY | O_CREAT);
lseek(fd, 1000000, SEEK_END);
/* write(fd, &fd, 1); */
close(fd);
return 0;
}
結果はwriteなしだとファイルサイズは0のまんまだった。
writeで書き込んでいく実装の奴をベースに、1日1回ぐらいメンテナンス時にlseekで中身を削ってみるとか? …それだったらもともとのタイムスタンプでカウンターを実現する方がスマートだな。