2016-01-18 2 views
1

Я пытаюсь написать массив символов на диск vhd с помощью libvhd (C++). Но он не работает с «номером ошибки -22» (-EINVAL/* Недопустимый аргумент * /). Нет никаких проблем при открытии и чтении дисков VHD с использованием libvhd, но я не знаю, в чем проблема в письменной форме. Вот часть моего кода для написания:Запись на диск VHD напрямую с использованием blktap/libvhd

vhd_context_t *ctx = NULL; 
int size,err; 
int z; 

char *buf =(char *)malloc(VHD_SECTOR_SIZE); 
z=vhd_unix_open("/home/zahra/Desktop/zahra/macemu/sys.vhd", &size, false, &ctx); 
printf("z: %d \n",z); 
/*reading a sector from a vhd disk*/ 
if ((err = vhd_io_read(ctx, buf, (uint64_t)0 ,(uint32_t) 1))){ 
     printf("vhd read error %d \n", err); 

} 
BIO_dump_fp (stdout, (const char *)buf, size_t (VHD_SECTOR_SIZE)); 
/*reading is OK*/ 
/*writing check*/ 
    char * plaintext= (char *)"This is a writing test"; 
if ((err = vhd_io_write(ctx,plaintext ,(uint64_t)0 ,(uint32_t)1))) { 
      printf("vhd write error %d\n", err); 
      printf("vhd footer current size %lld\n", ctx->footer.curr_size);} 

Запись с ошибкой «vhd write -22».

+0

У меня нет идеи, что такое libvhd, но он возвращает EINVAL в кучке мест: https://github.com/xapi-project/blktap/blob/master/vhd/lib/libvhd.c – mostruash

ответ

0

Я исправил проблему, используя 'posix_memalign' для выделения памяти.