هناك عدة طرق مختلفة لتعداد أحجام مثبتة على OS X ، كل منها يستخدم مجموعة مختلفة من واجهات برمجة التطبيقات. على أعلى مستوى (وأسهل) ، يمكنك استخدام NSFileManager's mountedVolumeURLsIncludingResourceValuesForKeys:options:
. إليك مثال مختصر:
NSArray *urls = [[NSFileManager defaultManager] mountedVolumeURLsIncludingResourceValuesForKeys:@[NSURLVolumeNameKey] options:0];
for (NSURL *url in urls) {
NSLog(@"Volume mounted at: %@", [url path]);
}
يعيدنا الخيار التالي إلى منطقة C - وكنت قريبًا جدًا من نهجك الأصلي. على OS X (و BSD) ، ليس هناك getmntent()
; ؛ بدلا من ذلك ، هناك getmntinfo()
, ، وهو مشابه بشكل لافت للنظر. لدرج أحجام مثبتة عبر getmntinfo()
, ، يمكنك القيام بما يلي:
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);
}
لقد استخدمت كل من واجهات برمجة التطبيقات هذه جنبًا إلى جنب منذ إصدار 10.6. getmntinfo()
دائما أكثر اكتمالا من [NSFileManager mountedVolumeURLsIncludingResourceValuesForKeys:options:]
: سوف يقوم الأخير بتصفية /dev
ونظم الملفات الأخرى التي قد ترغب أو لا ترغب في معرفتها. ومع ذلك ، من الموثوق بها بشكل عام للأقراص التي تقوم بتوصيلها في نظامك.
الغرض وراء إطار القرص مختلف ، كما لاحظت. القرص يدور حول مراقبة وإدارة أصول القرص. مع DA ، يمكنك الحصول على استدعاء كلما تم تركيب قرص جديد أو غير مثبت. يمكنك أيضًا إدارة تلك الأقراص عن طريق إعادة تسمية أو تصاعد أو إلغاء التغلب أو إخراجها ، وكذلك إدخال نفسك في عملية Mount/Unmount - وربط الطلبات المحتملة لفعل الشيء نفسه. ولكن ، كما أشرت ، لا يوفر واجهة لإدراج الأقراص الموجودة. بمجرد حصولك على قائمة أحجام المركبة ، تعتبر DA محطة تالية ممتازة (اعتمادًا ، بالطبع ، على سبب الحصول على هذه القائمة!).