磁盘工具可以访问此数据 – 当您选择驱动器并按信息按钮时,它会列出..
Partition Map Scheme : GUID Partition tabledisk IDentifIEr : disk0Media name : Hitachi HTS541612J9SA00 Media
..或选择一个分区:
disk IDentifIEr : disk0s3Mount Point : /Volumes/BOOTCAMP
是否有一个Cocoa API来实现这个目标?如果是这样,通过Interface Builder显示它的最佳方法是什么?
解决方法 土拨鼠指出,IORegistry确实是与设备相关的所有东西的首选来源. IOKit文档非常详细和有用;你应该从 IOKit Fundamentals开始,然后点击 Accessing Hardware from Applications,然后最终查看 Device File Access Guide for Storage Devices,如果你想获得BSD方式的信息.在这种情况下,您可以使磁盘仲裁框架执行查询IO注册表和注册通知的繁重工作.这样可以节省大量代码,但是要完成您想要做的所有事情,最终需要将IOKit函数与基础IOMedia对象一起使用(参见DADiskCopyIOMedia()
).
您可以在代表IO注册表中的磁盘的IOMedia对象周围编写Cocoa包装器,然后使用对象控制器将属性绑定到UI.
以下是通过磁盘仲裁框架注册磁盘外观通知的示例,以帮助您入门:
// gcc -Wall -framework Foundation -framework diskarbitration disk_arbiter.m -o disk_arbiter/* @file disk_arbiter.m * @author Jeremy W. Sherman * @date 2009-10-03 * * Demonstrates registering for disk appeared notifications from * the diskarbitration framework. * * Note that disk appeared notifications are delivered for all * already-appeared disks at the time of registration,and then * trickle in as the events actually happen thereafter. */#import <Foundation/Foundation.h>#import <diskarbitration/diskarbitration.h>#import <signal.h>sig_atomic_t sShouldExit = 0;static voID RegisterInterruptHandler(voID);static voID HandleInterrupt(int);static voID OndiskAppeared(DAdiskRef disk,voID *__attribute__((__unused__)));intmain(voID) { CFStringRef const kDARunLoopMode = kcfRunLoopDefaultMode; RegisterInterruptHandler(); // Set up session. DASessionRef session = DASessionCreate(kcfAllocatorDefault); DARegisterdiskAppearedCallback(session,NulL/*all disks*/,OndiskAppeared,(voID *)NulL); DASessionScheduleWithRunLoop(session,CFRunLoopGetCurrent(),kDARunLoopMode); // Run event loop. printf("Starting...\n(Press Ctrl-C to exit.)\n\n"); const Boolean kAndReturnAfterHandlingSource = TRUE; const CFTimeInterval kForOnesecond = 1.0; while (!sShouldExit) (voID)CFRunLoopRunInMode(kcfRunLoopDefaultMode,kForOnesecond,kAndReturnAfterHandlingSource); // Tear down and exit. printf("\nExiting...\n"); DASessionUnscheduleFromrunLoop(session,kDARunLoopMode); CFRelease(session); exit(EXIT_SUCCESS); return EXIT_SUCCESS;}static voIDRegisterInterruptHandler(voID) { struct sigaction sigact; sigact.sa_handler = HandleInterrupt; (voID)sigaction(SIGINT,&sigact,NulL/*discard prevIoUs handler*/);}static voIDHandleInterrupt(int __attribute__((__unused__)) signo) { sShouldExit = 1; RegisterInterruptHandler();}static voIDOndiskAppeared(DAdiskRef disk,voID *__attribute__((__unused__)) ctx) { printf("Lo,a disk appears!\n"); CFShow(disk);}
这是样本运行的输出:
$./disk_arbiter Starting...(Press Ctrl-C to exit.)Lo,a disk appears!<DAdisk 0x104f80 [0xa01c01a0]>{ID = /dev/disk3}Lo,a disk appears!<DAdisk 0x105b40 [0xa01c01a0]>{ID = /dev/disk2s1}Lo,a disk appears!<DAdisk 0x105ae0 [0xa01c01a0]>{ID = /dev/disk2s2}Lo,a disk appears!<DAdisk 0x105b60 [0xa01c01a0]>{ID = /dev/disk2}Lo,a disk appears!<DAdisk 0x105950 [0xa01c01a0]>{ID = /dev/disk1}Lo,a disk appears!<DAdisk 0x105bc0 [0xa01c01a0]>{ID = /dev/disk1s1}Lo,a disk appears!<DAdisk 0x105540 [0xa01c01a0]>{ID = /dev/disk0}Lo,a disk appears!<DAdisk 0x105660 [0xa01c01a0]>{ID = /dev/disk0s1}Lo,a disk appears!<DAdisk 0x1054a0 [0xa01c01a0]>{ID = /dev/disk0s2}^CExiting...总结
以上是内存溢出为你收集整理的列出所有驱动器/分区,并使用Cocoa获取/ dev / rdisc设备全部内容,希望文章能够帮你解决列出所有驱动器/分区,并使用Cocoa获取/ dev / rdisc设备所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)