我正在制作一个应用程序,需要知道CD驱动器是打开还是关闭。
eject
打开CD驱动器,并检查打开所需的时间(更短的时间表示打开,更长,嗯......),但我无法使用此技术,因为应用程序实际打开驱动器(如果驱动器关闭,我不想重新打开驱动器,如果驱动器打开,我也不想关闭驱动器。)
我如何在linux上执行此操作?我看到可以在Windows下执行此操作(虽然可能有问题),但我还没有看到在linux上执行此操作的方法。
如果无法使用linux API调用,是否可以实现可以执行此操作的低级函数?
答案 0 :(得分:6)
要使示例代码有效,您应该这样做:
#include <sys/ioctl.h>
#include <linux/cdrom.h>
int result=ioctl(fd, CDROM_DRIVE_STATUS, CDSL_NONE);
switch(result) {
case CDS_NO_INFO: ... break;
case CDS_NO_DISC: ... break;
case CDS_TRAY_OPEN: ... break;
case CDS_DRIVE_NOT_READY: ... break;
case CDS_DISC_OK: ... break;
default: /* error */
}
即。结果作为ioctl()函数结果返回,而不是作为slot参数。
答案 1 :(得分:4)
您可以使用CDROM_DRIVE_STATUS
ioctl获取托盘状态。所有适用于CD驱动器的ioctl都可以在/usr/include/linux/cdrom.h
#define CDROM_DRIVE_STATUS 0x5326 /* Get tray position, etc. */
取自here
int slot;
ioctl(fd, CDROM_DRIVE_STATUS, slot);
switch(slot) {
case CDS_NO_INFO: ... break;
case CDS_NO_DISC: ... break;
case CDS_TRAY_OPEN: ... break;
case CDS_DRIVE_NOT_READY: ... break;
case CDS_DISC_OK: ... break;
default: /* error */
}