Apakah ada perintah yang dapat Anda jalankan dalam skrip shell yang akan mendeteksi jika baki CD terbuka atau tertutup, dan mengembalikan 1 atau 0 tergantung pada apakah itu (atau sesuatu yang mudah ditafsirkan)?
Saat ini, saya sedang menjalankan perintah terbuka, dan menghitung berapa lama waktu yang dibutuhkan untuk mengeksekusi. Jika hampir instan, itu terbuka. Jika perlu waktu, itu terbuka dan sekarang ditutup.
Saya ingin metode yang tidak melibatkan perubahan status saat ini – cukup dengan mendeteksinya.
Jawaban yang Diterima:
Saya menemukan solusi kecil yang bagus di sini. Kode C di bawah ini, minimal diubah dari situs yang ditautkan, akan mengembalikan kode keluar jika baki terbuka dan
1
jika tidak.
Jadi, simpan kode ini sebagai sesuatu (mis. foo.c
) dan kompilasi dengan perintah ini:
gcc -o trayopen foo.c
Kemudian, salin executable yang dikompilasi, trayopen
ke /usr/bin
:
sudo cp trayopen /usr/bin
Anda seharusnya tidak dapat melakukan hal-hal seperti
trayopen /dev/sr0 && echo closed
Atau, lebih lengkap:
#!/bin/sh
if trayopen /dev/sr0
then
echo "Tray is open."
else
echo "Tray is closed."
fi
Kode:
#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);
}