Portál AbcLinuxu, 8. května 2025 20:21
int main (int argc, char* argv[]) { /* Open a file descriptor to the device specified on the command line. */ int fd = open (argv[1], O_RDONLY); /* Eject the CD-ROM. */ ioctl (fd, CDROMEJECT); /* Close the file descriptor. */ close (fd); return 0; }
Řešení dotazu:
int fd = open ("/dev/cdrom", O_RDONLY);
struct udev *u = udev_new(); struct udev_enumerate *ue = udev_enumerate_new(u); udev_enumerate_add_match_subsystem(ue, "block"); // .. // tady možná přidat další filtry // .. udev_enumerate_scan_devices(ue); struct udev_list_entry* e = udev_enumerate_get_list_entry(ue);Pak třeba while cyklem projdeš přes jednotlivý vrácený zařízení, koukneš, jestli je tam property určující, že je to cdromka. Název si teď přesně nepamatuju, ale najdeš ho, když spustíš něco jako
udevadm info --query=all --name=/dev/sr0Ještě koukni na attributy
udevadm info --attribute-walk --name=/dev/sr0Z toho zjistíš, co má cdromka oproti třeba pevnýmu disku, apod. Možná třeba pak kouknout i na rodičovský zařízení, jestli je to na SCSI subsystému apod. Potom příkaz eject pošleš buď přímo přes ioctl k tomu určený (z hlavy si nepamatuju, možná něco jako CDROM_EJECT, do ví), nebo přes SG_IO ioctl s odpovídajícím CDB pro EJECT.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.