Я новичок в MA C OS X. Я хочу получить Точка монтирования из вновь подключенного диска (Pen Drive) . Я уже попробовал некоторый код и получил путь монтирования из команды
diskutil info disk1S2 | grep \ "Mount Point: \" | 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);
}
, и я запускаю этот код с помощью этой команды
g cc DAD. c -o DAD -framework DiskArbitration -framework Foundation
но я получаю эту ошибку
Ошибка сегментации: 11
- Почему я получаю эту ошибку ?
- Как получить точку монтирования в ОС MA C?