Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > *NIX системы: Общие вопросы > Как определить, вставлен ли диск в CDROM


Автор: sharq 28.3.2006, 12:03
Как или с помощью чего отследить/определить, вставлен ли диск в CDROM?

Задача такая: пишу софтину на perl+Tk, нужно чтобы она реагировала, если вставлен диск (audio) в CDROM.
Я не знаю, как определить, что диск вставлен?




Автор: bilbobagginz 28.3.2006, 13:00
hal, inotifyd

Автор: sharq 28.3.2006, 18:31
bilbobagginz, а можешь поподробней, что утилиты делают.
Я нашел autorun - http://sourceforge.net/projects/autorun/.
Что лучше?

smile

Автор: powerfox 28.3.2006, 19:56
hal - дребедень, которая сообщает о подключении устройств+автомонтирование+разумные имена съёмным дискам. Можно использовать SDL(с биндами для perl), там есть функции для определения cdrom и работы с ним.

Автор: TwiSteR 28.3.2006, 22:08
sharq,
Хммм а может просто через system() проверить ?

Автор: sharq 28.3.2006, 22:38
TwiSteR,
Цитата(TwiSteR @ 28.3.2006, 23:08 Найти цитируемый пост)
Хммм а может просто через system() проверить ?

например? какую команду выполнить?
каждые пять секунд "пинговать" CDROM? smile

smile

Автор: TwiSteR 28.3.2006, 22:46
Цитата(sharq @ 28.3.2006, 22:38 Найти цитируемый пост)
например? какую команду выполнить?

пытаться смонтировать
Цитата(sharq @ 28.3.2006, 22:38 Найти цитируемый пост)
каждые пять секунд "пинговать" CDROM?

LOL smile

Автор: bilbobagginz 29.3.2006, 00:49
старые способы:
в принципе, все операции с КД делать на си можно при помощи ioctl, и /usr/src/linux/include/linux/cdrom.h
там описаны все операции над компакт дисками.
можно попытаться открыть устройство и сделать ioctl на прочитать
CDROM_DRIVE_STATUS или CDROM_DISC_STATUS
добраться до ioctl можно и перлом.

это думаю и есть правильный путь.

пока.

Автор: sharq 29.3.2006, 18:42
Всем большое спасибо!

Сделал на perl smile

Код

#!/usr/bin/perl

use strict;
use Fcntl ':DEFAULT';
require "sys/ioctl.ph";

sysopen  my $fh, '/dev/cdrom', O_RDONLY | O_NONBLOCK;
print ioctl($fh, 0x5325, 0) == 1 ? 'no' : 'yes', "\n";


Симпатично на perl смотрится, не правда ли?

smile

Автор: bilbobagginz 29.3.2006, 19:32
смотрится то нормально, только успешен ли sysopen, кто проверять будет?
почтальон Печкин ?
и распечатку результатов ioctl, тоже стоит делать после проверки успеха завершения ioctl

пока.

Автор: sharq 29.3.2006, 19:35
bilbobagginz,
Цитата(bilbobagginz @ 29.3.2006, 20:32 Найти цитируемый пост)
смотрится то нормально, только успешен ли sysopen, кто проверять будет?
почтальон Печкин ?
и распечатку результатов ioctl, тоже стоит делать после проверки успеха завершения ioctl

спасибо smile , но perl - не параноидальный язык и я не параноик.

smile

Автор: bilbobagginz 15.4.2006, 12:17
ну, на это мне сказать нечего.
просто есть некоторые системные вызовы вероятность которых грохнуться низкая, а сись-опен вроде твоего может довольно скоропостижно скончаться.
а перл ( имхо конечно ) это полноценный язык программирования.

Автор: GrayCardinal 15.4.2006, 12:23
Брррредятину разводите, ИМХО. Демонов сидирома уева туча, проблема в том, чтоб какой-нить прогой начали пользоваться...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)