我试图用C代码在MAC OS中获得新连接的磁盘(笔驱动器)装入点

我试图用C代码在MAC OS中获得新连接的磁盘(笔驱动器)装入点,c,xcode,macos,mount-point,diskarbitration,C,Xcode,Macos,Mount Point,Diskarbitration,我是MAC OS X新手。我想获得新连接的磁盘(笔驱动器)的装入点。我已经尝试了一些代码,并从命令获得了装载路径 diskutil info disk1S2 | grep \“装入点:\”| awk'{print$3}” 其中,disk1S2是新连接磁盘的标识符 但是我想在不依赖命令的情况下从C代码获取装入点 所以我试过这个密码 #include <stdio.h> #include <DiskArbitration/DiskArbitration.h> #include

我是MAC OS X新手。我想获得新连接的磁盘(笔驱动器)装入点。我已经尝试了一些代码,并从命令获得了装载路径

diskutil info disk1S2 | grep \“装入点:\”| awk'{print$3}”

其中,disk1S2是新连接磁盘的标识符

但是我想在不依赖命令的情况下从C代码获取装入点

所以我试过这个密码

#include <stdio.h>
#include <DiskArbitration/DiskArbitration.h>
#include  <CoreFoundation/CoreFoundation.h>
#include <IOKit/IOKitLib.h> 
#include  <DiskArbitration/DASession.h>
#include <stdlib.h>
#include <strings.h>

#define MAXPATHLEN 500

void hello_disk(DADiskRef disk, void *context){
    CFDictionaryRef diskinfo,dict;
    diskinfo = DADiskCopyDescription(disk);
    CFURLRef fspath = CFDictionaryGetValue(dict,&kDADiskDescriptionVolumePathKey);
    char buf[MAXPATHLEN];
    if (CFURLGetFileSystemRepresentation(fspath, false, (UInt8 *)buf, sizeof(buf))) {
        printf("Disk %s mounted at %s\n",DADiskGetBSDName(disk),buf);
        // Print the complete dictionary for debugging. 
        CFShow(diskinfo);
    }else {
        // Something is *really* wrong. /
    }
}

void goodbye_disk(DADiskRef disk, void *context){
    printf("disk %s disappeared\n", DADiskGetBSDName(disk));
}

int main(){
    DASessionRef session;

    session = DASessionCreate(kCFAllocatorDefault);

    DARegisterDiskAppearedCallback(session, NULL, hello_disk, NULL);
    DARegisterDiskDisappearedCallback(session, NULL, goodbye_disk, NULL);

    DASessionScheduleWithRunLoop(session,CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);

    CFRunLoopRun();

    CFRelease(session);
    exit(0);
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#定义MAXPATHLEN 500
void hello_磁盘(DADiskRef磁盘,void*上下文){
CFDictionaryRef diskinfo,dict;
diskinfo=DADiskCopyDescription(磁盘);
CFURLRef fspath=CFDictionaryGetValue(dict和kdadiskDescriptionVolumePath);
char buf[MAXPATHLEN];
if(CFURLGetFileSystemRepresentation(fspath,false,(UInt8*)buf,sizeof(buf))){
printf(“磁盘%s安装在%s\n”,DADiskGetBSDName(磁盘),buf);
//打印完整的字典以进行调试。
CFShow(diskinfo);
}否则{
//有些事情真的出了问题/
}
}
void debye_磁盘(DADiskRef磁盘,void*上下文){
printf(“磁盘%s消失\n”,DADiskGetBSDName(磁盘));
}
int main(){
第三届会议;
会话=DASessionCreate(kCFAllocatorDefault);
DaregisterDiskApparedCallback(会话,NULL,hello\u disk,NULL);
DaregisterDiskNosearedCallback(会话,NULL,再见,U盘,NULL);
DASessionScheduleWithRunLoop(会话,CFRunLoopGetCurrent(),kCFRunLoopDefaultMode);
CFRunLoopRun();
新闻稿(会议);
出口(0);
}
我通过这个命令运行这个代码

gcc-DAD.c-o-DAD-framework-disk仲裁-framework基金会

但我得到了这个错误

分段错误:11

  • 为什么我会犯这个错误
  • 如何在MAC OS中获得装载点