Es gibt verschiedene Möglichkeiten, um montierte Volumina auf OS X aufzählten, jeweils A mit unterschiedlichen APIs. Auf höchstem (und einfachsten) Ebene können Sie NSFilemanager's verwenden mountedVolumeURLsIncludingResourceValuesForKeys:options:
. Hier ist ein abgekürztes Beispiel:
NSArray *urls = [[NSFileManager defaultManager] mountedVolumeURLsIncludingResourceValuesForKeys:@[NSURLVolumeNameKey] options:0];
for (NSURL *url in urls) {
NSLog(@"Volume mounted at: %@", [url path]);
}
Die nächste Option führt uns zurück zu C Territory - und Sie waren Ihrem ursprünglichen Ansatz so nahe. Auf OS X (und BSD) gibt es nicht getmntent()
; Stattdessen gibt es getmntinfo()
, was auffallend ähnlich ist. Um montierte Volumes über aufzulisten getmntinfo()
, Sie können Folgendes tun:
struct statfs* mounts;
int num_mounts = getmntinfo(&mounts, MNT_WAIT);
if (num_mounts < 0) {
// do something with the error
}
for (int i = 0; i < num_mounts; i++) {
NSLog(@"Disk type '%s' mounted at: %s", mounts[i].f_fstypename, mounts[i].f_mntonname);
}
Ich habe diese beiden APIs seit der Veröffentlichung von 10,6 nebeneinander verwendet. getmntinfo()
ist immer vollständiger als [NSFileManager mountedVolumeURLsIncludingResourceValuesForKeys:options:]
: Letzteres filtert die /dev
und andere Dateisysteme, über die Sie möglicherweise wissen möchten oder nicht. Es ist jedoch im Allgemeinen für die Festplatten, die Sie in Ihr System anschließen, zuverlässig.
Der Zweck hinter dem Diskarbitration -Framework ist, wie Sie bemerkt haben, unterschiedlich. Bei Diskarbitration geht es um die Überwachung und Verwaltung von Festplattenvermögen. Mit DA können Sie aufgerufen werden, wenn eine neue Festplatte montiert oder unmontiert ist. Sie können diese Datenträger auch verwalten, indem Sie sie umbenennen, montieren, abkassieren oder ausgeworfen und sich in den Mount/Unmount -Prozess einfügen - und möglicherweise Anfragen aussetzen, um dasselbe zu tun. Wie Sie betonten, bietet es jedoch keine Schnittstelle für die Auflistung vorhandener Datenträger. Sobald Sie Ihre Liste der montierten Bände erhalten haben, ist DA ein ausgezeichneter nächster Stopp (abhängig von Ihrem Grund, diese Liste zu erhalten!).