2013-09-09 3 views
0

код:записи() не писать на устройство

#include <fcntl.h> 
#include <linux/fs.h> 
#include <stdio.h> 
#include <sys/param.h> 
#include <sys/stat.h> 
#include <sys/time.h> 

void write_zero(char * file, unsigned long bytes) 
{ 
    printf("Zeroing %s\n", file); 
    unsigned int wrote = 0, total = 0; 
    int fd, i, buf; 
    char obj = 0x00; 

    fd = open(file, O_RDWR, DEFFILEMODE); 
    lseek(fd, 0, SEEK_SET); 
    write(fd, &obj, bytes); 
} 

int main(int argc, char * * argv) 
{ 
    int fd; 
    unsigned long blocks = 0; 
    char check = 0x0; 

    fd = open(argv[1], O_RDONLY); 
    ioctl(fd, BLKGETSIZE, &blocks); 
    close(fd); 

    printf("Blocks: %lu\tBytes: %lu\tGB: %.2f\n", 
      blocks, blocks * 512, (double)blocks * 512.0/(1024 * 1024 * 1024)); 
    do 
    { 
      printf("Write 0x0 to %s? [y/N] ", argv[1]); 
      fflush(stdout); 
    } 
    while (scanf("%c", &check) < 1); 
    if (check == 'y') 
    { 
      write_zero(argv[1], blocks * 512); 
    } 
} 

я не получаю ничего на самом деле записывается в устройство .. Я скопировал мою открытую линию от «дд» исходного кода, думая, может быть, он не был открыт сразу. dd может обнулить устройство, но этой программы нет. Есть идеи?

+2

Вы не проверяете возвращаемые значения ваших вызовов 'open' и' write'. Вы должны проверить возвращаемые значения, чтобы лучше понять, что происходит в вашем коде. – mathematician1975

+0

Я, я делаю это с помощью gdb. У меня было это сохранение переменной до – phyrrus9

+0

@ phyrrus9 Можете ли вы показать, как это называется и что он отображает в качестве вывода? –

ответ

2

Похоже, это был избит до смерти, но

char obj = 0x00; 

fd = open(file, O_RDWR, DEFFILEMODE); 
lseek(fd, 0, SEEK_SET); 
write(fd, &obj, bytes); 

Не собирается писать нули. Он собирается писать мусор из стека.

Смежные вопросы