好吧,用 C 语言做这件事相当容易。首先,您以写入模式打开相应的设备文件:
int fd = open("/dev/sdc", O_WRONLY);
你只write()
需要 512 字节的块,直到你不能再写了。较新的磁盘使用 4096 字节扇区,但操作系统通常将它们视为具有 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
。)
请注意,由于缓存,程序在打印“完成”后可能会在最后挂起一段时间。它并没有真正挂起,只是写操作的缓存会阻塞它,直到它们全部完成。