LINUX.ORG.RU

Как остановить CDROM, безуспешно третирующий битый CD


0

0

У меня в ноутбуке CDROM не очень хороший. Некоторые диски плохо читает. А иногда входит в ступор - пытается в бесконечном цикле прочесть некий битый сектор. Ему это не удаётся, но он не оставляет свои попытки, дико завывая. И его НИКАК не остановить - на кнопку не реагирует, отмонтировать не даёт (busy), убиение приложения (mc) тоже ничего не меняет. Приходится перегружаться. Есть ли более элегантный выход, без перезагрузки?

anonymous

%-) У меня на десктопе тоже не очень сидюк, единственное решение которое я нашел - выдернуть кабель от блока питания а потом вставить... А потом быстренько вытасчить диск.

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

Вот, накарябал (частично - нашёл в интернете):
--------------------------------------
/* abort.c : Aborts any (hopenfully) CD operations and ejects CD;
DANGEROUS! This can cause a kernel panic! */

#include <sys/types.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/cdrom.h>

#define CDDEVICE "/dev/cdrom"           /* CDROM device */

int main(int argc,char **argv)
{
   int cdrom;                           /* CDROM device file descriptor */

   /* Open the CDROM device. The linux/cdrom.h header file specifies that
   ** it must be given the O_NONBLOCK flag when opening. My tests showed
   ** that if this isn't done, this program will not work. 
   */
   if ((cdrom = open(CDDEVICE,O_RDONLY | O_NONBLOCK)) < 0) {
        perror("open");
        exit(1);
   }

   /* Use ioctl to send the CDROMLOCKDOOR command to the device */
   if (ioctl(cdrom,CDROM_LOCKDOOR,0)<0) {
        perror("ioctl");
        exit(1);
   }

   /* Use ioctl to send the CDROMRESET command to the device */
   if (ioctl(cdrom,CDROMRESET,0)<0) {
        perror("ioctl");
        exit(1);
   }

   /* Use ioctl to send the CDROMSTOP command to the device */
   if (ioctl(cdrom,CDROMSTOP,0)<0) {
        perror("ioctl");
        exit(1);
   }

   /* Use ioctl to send the CDROMEJECT command to the device */
   if (ioctl(cdrom,CDROMEJECT,0)<0) {
        perror("ioctl");
        exit(1);
   }

   close(cdrom);
} --------------------------------------
У меня сия программка вышибает CD, даже если идёт процесс копирования
чего-то с него. Kernel panic пока не наблюдал :). Вот, жду, когда CDROM
снова "зависнет" - интересно, поможет это в данной ситуации или нет :)

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