【问题标题】:Unmount a network volume?卸载网络卷?
【发布时间】:2011-11-25 13:49:31
【问题描述】:

如何卸载网络卷?

NSWorkspace 认为它们既不能移动也不能安装。 unmountAndEjectDeviceAtPath: @"/Volumes/the network volume in question" 不会导致任何事情发生。可能有一些简单的方法可以做到这一点,坐在我的鼻子下面,但我找不到。

我不想诉诸于制作一个 Applescript 告诉 Finder 弹出网络卷并从 Cocoa 调用它,因为这实在是太恶心了。

(顺便说一下,我的开发平台是 Tiger)

【问题讨论】:

  • 您是否尝试在 Objective-C 中以编程方式卸载设备?如果是这样,请在您的问题中更清楚地说明这一点,因为您的问题现在读起来不像是编程问题。

标签: macos networking volumes unmount


【解决方案1】:

打电话给unmount(2) 公平游戏吗? (奇怪的是,大多数 Unix 系统将系统调用命名为 umount(),而不是 unmount(),并且手册页经常将其命名为 umount(),尽管名称和概要部分相当清楚地使用了 unmount()。)

该坐骑是否被其他任何东西使用?检查lsof(1)fuser(1) 输出以查看哪些进程(如果有)当前打开了该文件系统。 (也许在您的卸载调用之前添加一个简单的chdir("/"); 可以做到这一点?)

【讨论】:

  • 是的!谢谢! unmount("/Volumes/theVolume",0) 完美运行。确实很容易而且就在我的鼻子底下。呃。阅读您的答案后,我还发现终端命令umount /Volumes/theVolume 或简单的umount theVolume 也可以工作,并且可以使用NSTask 通过Cocoa 执行,但unmount() 更整洁。愚蠢的NSWorkspace。嘘。
【解决方案2】:

你也可以使用 diskutil,它比 unmount() 处理更多的情况:

std::string command = std::string("diskutil unmount \"") + currentMountPoint + "\"";
int ret = system( command.c_str() );

注意挂载点周围的双引号,很可能类似于/Volumes/Untitled,但也类似于/Volumes/NO NAME

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 2015-04-09
    • 2019-08-18
    • 2019-07-30
    相关资源
    最近更新 更多