Смонтировать устройство NTFS в C ++ на Linux?

Я пытаюсь смонтировать внешний диск в моем приложении C ++. Первоначально я пытался использовать mount (2), но это не удается:

int ret = mount(deviceName.c_str(), mountPoint.c_str(), fsType.c_str(), 0, NULL);

errno 19, ENODEV (тип файловой системы не настроен в ядре)

Тем не менее, если я переключусь на использование mount (8), он будет работать нормально:

std::string cmd = "mount -t " + fsType + " " + deviceName + " " + mountPoint;
int ret = system(cmd.c_str());

Имеет ли mount (2) другой список допустимых типов файловых систем? Это устройство NTFS, поэтому я использовал ntfs-3g как тип. Я проверил / proc / filesystems и увидел, что этого нет в списке, поэтому я попытался fuseblk но это просто изменяет ошибку на 22, EINVAL,

Как правильно монтировать устройства NTFS с помощью mount (2)?

4

Решение

mount.2 это просто вызов ядра. mount.8 это полный внешний инструмент, который выходит за рамки того, что делает ядро.

Я думаю, что вы можете искать libmount которая является библиотекой, реализующей всю магию монтирования mount.8, Более новые версии монтирования используют это также. Это предусмотрено в Util-Linux.

4

Другие решения

Ты пробовал бегать mount(8) с использованием strace команда? Он распечатает системные вызовы, сделанные программой, в том числе mount(2), Когда я делаю такое крепление, оно порождает mount.ntfs (который является NTFS-3g), который затем делает mount за fuseblk и затем вращается в фоновом режиме, чтобы поддержать эту точку монтирования.

Файловые системы на основе FUSE обрабатываются по-разному, потому что демон пользовательского пространства должен быть запущен. Монтаж с fuseblk не предоставляет достаточно информации ядру для запуска демона (а ядро ​​даже не имеет информации для запуска демона). Для NTFS-3G обычно можно сделать что-то вроде ntfs-3g /dev/sda1 /mnt/windows (из справки). Не существует программного способа, чтобы заставить ядро ​​сделать это, потому что это происходит в пространстве пользователя.

2

По вопросам рекламы [email protected]