A solução é basicamente aqui . Em /usr/include/linux/cdrom.h você encontrará todos ioctl () para o cdrom,
#define CDROM_DRIVE_STATUS 0x5326 /* Get tray position, etc. */
Um snippet de código que retorna isso para você é:
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: /* something else, whichever you like */
}
O ponto chave é, claro, o CDS_TRAY_OPEN.