Я пытаюсь смонтировать образ диска vfat из DOS, используя. C
if( mount( "/mypath/disk.img", "/mypath/img/", "vfat", MS_DIRSYNC | MS_SYNCHRONOUS, "utf8" ) ) {
printf( "Error mount %s errno=%d %s\n", dst.c_str(), errno, strerror( errno ) );
}
Я все время получаю сообщение об ошибке "Требуется блочное устройство". Должен ли я добавить какой-либо параметр или флаг?
Примечание: я могу смонтировать из bash того же файла в той же цели без ошибок.
ОБНОВЛЕНИЕ: У меня был хороший результат, используя Функция для установки ISO. Когда я запускаю программу, она остается сложенной при вызове ioctl(loop_device_fd, LOOP_CLR_FD, 0);
. Когда я выхожу из программы (ctrl- c), образ монтируется. Нужно ли LOOP_CLR_FD завершить все шаги? Кроме того, он монтируется только для чтения и, по-видимому, невозможно изменить его для чтения / записи.
const auto loop_control = std::fopen( "/dev/loop-control", "r" );
const auto loop_control_fd = fileno(loop_control);
const auto devnr = ioctl(loop_control_fd, LOOP_CTL_GET_FREE);
std::stringstream loopname;
loopname << "/dev/loop" << devnr;
const auto loop_device_name = loopname.str();
const auto loop_device = std::fopen(loop_device_name.c_str(), "r");
const auto loop_device_fd = fileno(loop_device);
const auto image = std::fopen( dst.c_str(), "r" );
const auto image_fd = fileno(image);
//Associate the loop device with the open file whose file descriptor is passed as the (third) ioctl(2) argument.
ioctl(loop_device_fd, LOOP_SET_FD, image_fd);
const auto result = mount(loop_device_name.c_str(), dst_path_img.c_str(), "vfat", MS_RDONLY, NULL);
if( result ) {
printf( "Error mount %s errno=%d %s\n", dst.c_str(), errno, strerror( errno ) );
return;
}
ioctl(loop_device_fd, LOOP_CLR_FD, 0);