OSX 获取 CD 速度 (ioctl)
Posted
技术标签:
【中文标题】OSX 获取 CD 速度 (ioctl)【英文标题】:OSX Get CD Speed (ioctl) 【发布时间】:2012-02-16 20:57:18 【问题描述】:我正在分发使用光盘的软件,并且在默认全速下它噪音太大而无法接受。我的目标是使用 ioctl 降低磁盘的速度,但我不知道如何从 /Volumes/MyDisk/Application 中找到 /dev/disk(n)。
以下是我目前所拥有的,但我不想硬编码磁盘路径。
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <IOKit/storage/IOCDMediaBSDClient.h>
int main ()
// ------------------------------------
// Open Drive
// ------------------------------------
int fd = open("/dev/disk1",O_RDONLY);
if (fd == -1)
printf("Error opening drive \n");
exit(1);
// ------------------------------------
// Get Speed
// ------------------------------------
unsigned int speed;
if (ioctl(fd,DKIOCCDGETSPEED,&speed))
printf("Must not be a CD \n");
else
printf("CD Speed: %d KB/s \n",speed);
// ------------------------------------
// Close Drive
// ------------------------------------
close(fd);
return 0;
【问题讨论】:
【参考方案1】:您可能需要遍历 /dev 中的磁盘条目,打开每个条目,然后使用其他一些 ioctl() 来识别它们的类型。
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <IOKit/storage/IOCDMediaBSDClient.h>
int main( int argc, char *argv[])
int i, fd;
unsigned short speed;
char disk[40];
for (i = 0; i < 100; ++i)
sprintf( disk, "/dev/disk%u", i);
fd = open( disk, O_RDONLY);
if (fd != -1)
if (ioctl( fd, DKIOCCDGETSPEED, &speed))
printf( "%s is not a CD\n", disk);
else
printf( "%s CD Speed is %u KB/s\n", disk, speed);
close( fd);
return 0;
在我的旧 MacBook Pro 上,DVD 驱动器中没有磁盘,它告诉我 disk0 和 disk1 都不是 CD 驱动器。加载磁盘(并且代码固定为使用无符号速度缩写)后,它会将 /dev/disk2 报告为速度为 4234 KB/s 的 CD。
【讨论】:
感谢您提供示例代码!这听起来可能是最好的解决方案。我也在考虑在卷上使用 statfs.f_mntfromname,但它返回的东西不适用于 ioctl。感谢您的回复!以上是关于OSX 获取 CD 速度 (ioctl)的主要内容,如果未能解决你的问题,请参考以下文章