好吧,在C中做这件事很容易.首先,在写入模式下打开相应的设备文件:
int fd = open("/dev/sdc", O_WRONLY);
Run Code Online (Sandbox Code Playgroud)
你只需要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;
}
Run Code Online (Sandbox Code Playgroud)
如果你删除printf()它可能会加速,虽然看到进展发生时很酷.您可能还应该在结尾处执行其他错误检查(如果written为-1,则发生错误,您应该检查errno.)
请注意,由于缓存,程序在打印"完成"后可能会在结束时挂起一段时间.它并没有真正悬挂,只是写操作的缓存阻塞它,直到它们全部完成.