I am new to MAC OS X. I want to get Mount Point of newly attached disk (Pen Drive). I already tried some code and got mount path from command
diskutil info disk1S2 | grep \" Mount Point: \" | awk '{print $3}'
where disk1S2 is Identifier of newly attached disk.
But I want to get mount point from C code without depending upon command.
So tried this code
#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);
}
and I run this code by this command
gcc DAD.c -o DAD -framework DiskArbitration -framework Foundation
but I am getting this error
Segmentation fault: 11
- Why I am getting this error ?
- How can I get mount point in MAC OS ?