如何在linux中检查CD驱动器是打开还是关闭?

时间:2013-03-27 05:35:10

标签: c++ c linux cd-drive

我正在制作一个应用程序,需要知道CD驱动器是打开还是关闭。

eject打开CD驱动器,并检查打开所需的时间(更短的时间表示打开,更长,嗯......),但我无法使用此技术,因为应用程序实际打开驱动器(如果驱动器关闭,我不想重新打开驱动器,如果驱动器打开,我也不想关闭驱动器。)

我如何在linux上执行此操作?我看到可以在Windows下执行此操作(虽然可能有问题),但我还没有看到在linux上执行此操作的方法。

如果无法使用linux API调用,是否可以实现可以执行此操作的低级函数?

2 个答案:

答案 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 */
}