LINUX.ORG.RU

Как отловить событие «Вставка CD»


0

0

Уважаемые программеры!
Как в linux определить что в лоток CD-ROM поместили диск.
Винда это как-то отлавливает, да и KDE вроде тоже умеет.
Надо определить именно событие Эвставка диска"
Заранее спасибо

anonymous

смотри в сторону hal, hotplug и dbus

anonymous
()

> Как в linux определить что в лоток CD-ROM поместили диск.
> Винда  это как-то отлавливает, да и KDE вроде тоже умеет.
> Надо определить именно событие Эвставка диска"

Посмотри исходники ivman или gnome-volume-manager. По идее это делается
через hal...

int19h ★★★★
()
Ответ на: комментарий от int19h

HAL и DBUS - хорошо, но они требуют /sys
А какнить через ioctl или обработку события какогонибудь устройства это сделать?

anonymous
()

perl

sysopen(CD,'/dev/cdrom',O_RDONLY | O_NONBLOCK) || die "Can not access /dev/cdrom: $!";
my $retval = ioctl(CD, 0x5327, 0); # CDROM_DISC_STATUS
close (CD);
# Диск в приводе?
if ($retval == 101) {

}

sdio ★★★★★
()

Нужно через ioctl дёргать /dev/cdrom или как его там у тебя зовут. Только тут есть один смешной фокус :)

Событие это может поймать только кто-то один - т.е. драйвер говорит один раз самому первому кто спросит. К примеру есть у тебя на машине automount и твоя программка, вероятнее всего автомаунт будет _всегда_ быстрее тебя перехватывать это событие и ты просто не узнаешь о том что CDROM_MEDIA_CHANGED случилось. С другой стороны если прибить все эти замечательные софтины то станет сильно лучше :)

CDROM_MEDIA_CHANGED живёт в linux/cdrom.h. В ioctl даже вроде аргументов не нужно (не помню).

ms
()
Ответ на: комментарий от ms

Проблему решил ЮКому надо http://www.protect.org.ru/by/devs.c создаете файл с конфигом вида /путь/до/девайса /путь/до/точки/монтирования Прога опрашивыает каждые 5 секунд сидюк Если статус измениляся - то монтируем устройство Если извлекли диск,то демонтирую его. Одна проблема - событие происходит всегда если в сидюке ничего нет

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.