也man fstab
没有man diskarbitrationd
(例如参见此处)未提及的弃用/etc/fstab
。
默认情况下它不存在,但是如果它是空的,因为默认值很好,那为什么应该呢?如果您需要它,它就在那里。
关于弃用的声明fstab
已经在网上流传了一段时间。
从这里:
Leopard中不推荐使用etc / fstab
从这里:
我本来建议编辑/ etc / fstab文件,但显然在Leopard中已弃用该文件,现在可能已从Snow Leopard中删除了该文件...
除了其文档中没有提及过时的事实外,Apple 为什么还要添加实用程序来正确编辑过时的配置文件?
报价man vifs
:
NAME
vifs -- safely edit fstab
[...]
HISTORY
The vifs utility originates from Mac OSX 10.5.
当以下程序运行时(无限循环,Ctrl-C退出),不会安装任何磁盘,在适当的条件下,您当然可以对其进行更细粒度的控制:
#include <CoreFoundation/CoreFoundation.h>
#include <DiskArbitration/DiskArbitration.h>
DADissenterRef BlockMount(DADiskRef disk, void *context)
{
DADissenterRef dissenter = DADissenterCreate(kCFAllocatorDefault, kDAReturnNotPermitted, CFSTR("forbidden!"));
return dissenter;
}
int main (int argc, const char * argv[])
{
DAApprovalSessionRef session = DAApprovalSessionCreate (kCFAllocatorDefault);
if (!session)
{
fprintf(stderr, "failed to create Disk Arbitration session");
}
else
{
DARegisterDiskMountApprovalCallback(session, NULL, BlockMount, NULL);
DAApprovalSessionScheduleWithRunLoop(session, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
while (true) {
CFRunLoopRunInMode(kCFRunLoopDefaultMode, 60 /* seconds */, false);
}
DAApprovalSessionUnscheduleFromRunLoop(session, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
DAUnregisterApprovalCallback(session, BlockMount, NULL);
CFRelease(session);
}
return 0;
}
另存为main.c并使用以下命令进行编译(您需要开发人员工具):
cc main.c -o mountstopd -framework Foundation -framework DiskArbitration