Я хочу смонтировать каталог, который находится на другом хосте в моей сети. До сих пор я успешно делал это через afp
, используя mount(8) через системный вызов, например:
std::string syscmd = "mount -v -t afp -r \"afp://user:password@host/dir\" \"/tmp/foo/bar\"";
FILE *fd;
if(!(fd = popen(syscmd.c_str(), "r"))) {
std::cout << "oops. popen() failed." << std::endl;
exit(1);
}
Но я хотел бы монтировать напрямую с помощью вызова функции, без дополнительных накладных расходов на вызов оболочки с помощью popen()
. Я не могу понять, как это сделать с помощью mount(2), который имеет следующую подпись:
int mount(const char *type, const char *dir, int flags, void *data);
Каким должно быть data
? Страница руководства не объясняет это подробно. Например, он говорит:
Data
— это указатель на структуру, содержащую аргументы конкретного типа для монтирования. Формат этих структур аргументов описан на странице руководства для каждой файловой системы.
Где эта страница руководства, на которую он ссылается? Есть ли какая-то другая документация, которую мне не хватает? Может ли кто-нибудь указать мне простой рабочий пример, иллюстрирующий использование mount(2) поверх afp? Есть лучший способ сделать это?
mount_afp
с включенной трассировкой системных вызовов, чтобы увидеть, как он вызываетmount()
. - person Barmar   schedule 26.05.2017char data[]="afp://user:password@host/dir"; mount("hfs","/tmp/foo/",MNT_RDONLY,data);
, но это дало ошибку 14 (неверный адрес). Я попытался запуститьmount_afp
с отслеживанием вызовов (dtruss
), но не нашел ничего полезного в тысячах строк вывода. - person jt bullitt   schedule 27.05.2017