まあ、Cでそれを行うのはかなり簡単です。まず、適切なデバイス ファイルを書き込みモードで開きます。
int fd = open("/dev/sdc", O_WRONLY);
write()
そして、それ以上書き込めなくなるまで、512 バイトのチャンクを単純に追加します。新しいディスクは代わりに 4096 バイト セクターを使用しますが、OS は通常、ディスクが 512 バイト セクターを持っているかのように扱うため、512 が最も安全な値です。これを正確に行う C プログラムを次に示します。
(注:正しい /dev デバイス ファイルを選択するように十分注意してください。そうしないと、間違ったディスクを一掃してしまいます!)
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
int main(void)
{
int fd = open("/dev/sdd", O_WRONLY);
if (fd < 0) {
fprintf(stderr, "Error opening device file.\n");
return EXIT_FAILURE;
}
// Write 0's all over the disk, in chunks of 512 bytes.
char* zeros = calloc(1, 512);
ssize_t written, total = 0;
do {
total += written = write(fd, zeros, 512);
printf("\rBytes written: %ld", total);
} while (written == 512);
printf("\nDone!\n");
close(fd);
free(zeros);
return 0;
}
を削除するとスピードアップする可能性がありますがprintf()
、進行状況を確認するのはちょっとクールです. おそらく、最後に追加のエラー チェックを行う必要があります (written
が -1 の場合、エラーが発生したため、チェックする必要がありますerrno
)。
キャッシングが原因で、「完了」と出力された後、プログラムが最後にしばらくハングしているように見える場合があることに注意してください。ハングしているわけではなく、書き込み操作のキャッシュがすべて完了するまでブロックしているだけです。