【发布时间】:2017-10-27 19:08:48
【问题描述】:
我想挂载一个位于我网络上另一台主机上的目录。到目前为止,我已经通过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() 调用 shell 的额外开销。我不知道如何使用具有此签名的mount(2) 来执行此操作:
int mount(const char *type, const char *dir, int flags, void *data);
data 应该是什么?手册页没有详细解释这一点。例如,它说:
Data是指向包含特定类型的结构的指针 挂载的论据。这些参数结构的格式是 每个文件系统的手册页中都有描述。
它所指的手册页在哪里?我还缺少其他一些文档吗?谁能指出我一个简单的工作示例来说明 mount(2) 在 afp 上的使用?有没有更好的方法来做到这一点?
【问题讨论】:
-
我在任何地方都找不到它的手册页。我的猜测是它只需要一个指向 URL 的指针。
-
也许在启用系统调用跟踪的情况下运行
mount_afp以查看它如何调用mount()。 -
@Barmar 我尝试了
char data[]="afp://user:password@host/dir"; mount("hfs","/tmp/foo/",MNT_RDONLY,data);,但这给出了错误 14(“错误地址”)。我尝试使用呼叫跟踪 (dtruss) 运行mount_afp,但在数千行输出中找不到任何有用的信息。