URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3568
[ Назад ]

Исходное сообщение
"Программное определение списка CD-ROM в Linux"

Отправлено Dimich , 08-Ноя-04 16:03 
Приветствую!

Каким образом можно получить список доступных устройств CD-ROM в Linux? Вернее, нужно получить их пути (/dev/hd...). Мне посоветовали сделать так:

int fd;
char Device[11];
struct cdrom_volctrl cdct;
for (unsigned char i=0;i<4;i++)
{
sprintf(Device,"/dev/hd%c/",'a'+i);
if ((fd=open(Device,O_RDONLY))!=-1)
  {
   if (ioctl(fd,CDROMVOLREAD,&cdct)!=-1)
    {
     // Это CD-ROM
    }
   close(fd);
  }
}

Но это работает только когда в устройство вставлен компакт-диск. А можно ли как-нибудь определить CD-ROM'ы без необходимости вставлять в них CD?


Содержание

Сообщения в этом обсуждении
"Программное определение списка CD-ROM в Linux"
Отправлено hatta , 09-Ноя-04 11:54 
/proc/sys/dev/cdrom/info - по-моему инфу про сидиромы лучше всего искать там.

"Программное определение списка CD-ROM в Linux"
Отправлено Bob , 09-Ноя-04 12:29 
>Приветствую!
>
>Каким образом можно получить список доступных устройств CD-ROM в Linux? Вернее, нужно
>получить их пути (/dev/hd...). Мне посоветовали сделать так:
>
>int fd;
>char Device[11];
>struct cdrom_volctrl cdct;
>for (unsigned char i=0;i<4;i++)
>{
> sprintf(Device,"/dev/hd%c/",'a'+i);
> if ((fd=open(Device,O_RDONLY))!=-1)
>  {
>   if (ioctl(fd,CDROMVOLREAD,&cdct)!=-1)
>    {
>     // Это CD-ROM
>    }
>   close(fd);
>  }
>}
>
>Но это работает только когда в устройство вставлен компакт-диск. А можно ли
>как-нибудь определить CD-ROM'ы без необходимости вставлять в них CD?

Попробуй при открытии устройства добавить ключ O_NONBLOCK:
fd=open(Device,O_RDONLY|O_NONBLOCK);