LINUX.ORG.RU

Как определить, вставлен ли диск в CDROM, Аналог autorun в Windows


0

0

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

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

Есть вариант - определить через ioctl.


Я примерно вот этим тиражирую болванки когда надо
Почитай, вроде все ясно. Там ответ на твой вопрос внутре
На перле такая же либа есть.

#! /usr/bin/env python
# -*- coding: UTF -*-
import os
import fcntl
import sys
import time

IsMediaLoad = 0x5325
cdrwDevice     = "/dev/cdrom"
cdrwScsi    = "ATAPI:0,0,0"
cdCount        = 0

cdrwDevice     = sys.argv[1]
cdrwScsi     = sys.argv[2]
cdIso       = sys.argv[3]
cdCount     = int(sys.argv[4])


if os.access(cdrwDevice, os.F_OK | os.R_OK):

    i = 0

    while i < cdCount:

        CDRW = os.open(cdrwDevice, os.O_RDONLY | os.O_NONBLOCK)
        IsReady = fcntl.ioctl(CDRW, IsMediaLoad, 0)
        os.close(CDRW)
        if IsReady == 0:
            os.spawnlp(os.P_WAIT, "cdrecord", "cdrecord", "dev="+cdrwScsi, "grac etime=2", "driveropts=burnfree", "-eject", cdIso )
            i+=1

        time.sleep(3)



# print "Device",cdrwDevice,"Not found"

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

Всем большое спасибо! Особенно kilolife!

Вот код на python'е:

#!/usr/bin/env python

import os
import fcntl

IsMediaLoad = 0x5325
cdromDevice = "/dev/cdrom"

if os.access(cdromDevice, os.F_OK | os.R_OK):
	CDROM = os.open(cdromDevice, os.O_RDONLY | os.O_NONBLOCK)
	IsReady = fcntl.ioctl(CDROM, IsMediaLoad, 0)
	os.close(CDROM)
	print "Device",cdromDevice,"is",IsReady


А вот код на perl'е:

#!/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 смотрится, не правда ли? :)

ЗЫ до открытия /dev/cdrom я догодался, но до того, как использовать ioctl (а именно: 0x5325) - не знал. Спасибо!

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

4:04:25 geek: тык чё? не поможешь брату-слакварщегу во имя святого патрега?
4:04:34 JB: это естественный отбор
4:04:39 JB: справится - труЪ слакварщик
4:04:42 JB: нет - гентушнег
4:04:43 JB: :)

:))))))

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

Да да, меня тогда подтолкнул в правильном направлении.
Теперь я вот помог.

Только константа там другая таки, но это я уже узнал поглядев в сорцы к модулю сидирума.

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