8

CDドライブが開いているか閉じているかを知る必要のあるアプリケーションを作成しています。

ejectCDドライブを開き、開くのにかかる時間を確認します(短い時間は開いていると言いますが、長いです...)が、アプリケーションが実際にドライブを開くため、この手法は使用できません(そして私はドライブが閉じている場合はドライブを再度開きたくない。ドライブが開いている場合はドライブを閉じたくない)。

Linuxでこれを行うにはどうすればよいですか?Windowsでこれを行うことは可能であることがわかりましたが(間違っているかもしれませんが)、Linuxでこれを行う方法は見ていません。

Linux API呼び出しを使用できない場合、これを実行できる低レベルの関数を実装することは可能ですか?

4

2 に答える 2

8

サンプルコードを機能させるには、次のようにする必要があります。

#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()関数の結果として返されます。

于 2013-10-04T10:59:14.230 に答える
6

CDROM_DRIVE_STATUSioctlを使用してトレイの状態を取得できます。CDドライブのすべてのioctlは、次の場所にあります。/usr/include/linux/cdrom.h

#define CDROM_DRIVE_STATUS      0x5326  /* Get tray position, etc. */

ここから撮影

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 */
}
于 2013-03-27T06:41:05.803 に答える