CDトレイが開いているか閉じているかを検出し、それが開いているかどうか(または解釈しやすいもの)に応じて1または0を返すシェルスクリプトで実行できるコマンドはありますか?
現在、openコマンドを実行しており、実行にかかる時間を計っています。ほぼ瞬時であれば、開いています。時間がかかる場合は、開いていて、現在は閉じています。
現在の状態を変更せず、検出するだけの方法が欲しいのですが。
承認された回答:
私はここで素敵な小さな解決策を見つけました。以下のCコードは、リンクされたサイトから最小限の変更で、の終了コードを返します。 トレイが開いていて
1
の場合 そうでない場合。
したがって、このコードを何かとして保存します(例:foo.c
)そして次のコマンドでコンパイルします:
gcc -o trayopen foo.c
次に、コンパイルされた実行可能ファイルtrayopen
をコピーします /usr/bin
へ :
sudo cp trayopen /usr/bin
のようなことはできないはずです
trayopen /dev/sr0 && echo closed
または、より完全なもの:
#!/bin/sh
if trayopen /dev/sr0
then
echo "Tray is open."
else
echo "Tray is closed."
fi
コード:
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/cdrom.h>
int main(int argc,char **argv) {
int cdrom;
int status=1;
if (! argv[1] ){
printf("Usage : trayopen [device]\n");
printf("Result: Returns a 0 if the tray was open and 1 if it was closed\n");
exit(2);
}
if ((cdrom = open(argv[1],O_RDONLY | O_NONBLOCK)) < 0) {
printf("Unable to open device %s. Provide a device name (/dev/sr0, /dev/cdrom) as a parameter.\n",argv[1]);
exit(2);
}
/* Check CD tray status */
if (ioctl(cdrom,CDROM_DRIVE_STATUS) == CDS_TRAY_OPEN) {
status=0;
}
close(cdrom);
exit(status);
}