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