Ну, сделать это на 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.)
Обратите внимание, что из-за кэширования программа может некоторое время зависать в конце после того, как напечатает «Готово». На самом деле это не зависание, просто кэширование операций записи блокирует его до тех пор, пока они все не будут завершены.
person
Nikos C.
schedule
15.11.2012
dd if=/dev/zero, если нельзя сделать это с помощьюdd if=/dev/[u]random? - person Dietrich Epp   schedule 15.11.2012stupid adobe flash. РЖУ НЕ МОГУ - person madper   schedule 15.11.2012