Pregunta

Estoy distribuyendo un software que usa un disco óptico, y a la velocidad completa predeterminada es demasiado ruidoso para ser aceptable. Mi objetivo es reducir la velocidad del disco usando IOCTL, pero no sé cómo encontrar/dev/disco (n) de/volumes/mydisk/aplicación.

Lo siguiente es lo que tengo hasta ahora, pero no quiero la ruta de disco codificada.

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <IOKit/storage/IOCDMediaBSDClient.h>

int main () {
    // ------------------------------------
    //   Open Drive
    // ------------------------------------
    int fd = open("/dev/disk1",O_RDONLY);
    if (fd == -1) {
        printf("Error opening drive \n");
        exit(1);
    }

    // ------------------------------------
    //   Get Speed
    // ------------------------------------
    unsigned int speed;
    if (ioctl(fd,DKIOCCDGETSPEED,&speed)) {
        printf("Must not be a CD \n");
    }
    else {
        printf("CD Speed: %d KB/s \n",speed);
    }

    // ------------------------------------
    //   Close Drive
    // ------------------------------------
    close(fd);
    return 0;
}
¿Fue útil?

Solución

Es posible que tenga que caminar las entradas de disco en /dev, abriendo cada una y luego usando algún otro ioctl () para identificar su tipo.

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <IOKit/storage/IOCDMediaBSDClient.h>

int main( int argc, char *argv[])
{
    int i, fd;
    unsigned short speed;
    char disk[40];

    for (i = 0; i < 100; ++i)
    {
        sprintf( disk, "/dev/disk%u", i);
        fd = open( disk, O_RDONLY);
        if (fd != -1)
        {
            if (ioctl( fd, DKIOCCDGETSPEED, &speed))
            {
                printf( "%s is not a CD\n", disk);
            }
            else
            {
                printf( "%s CD Speed is %u KB/s\n", disk, speed);
            }
            close( fd);
        }
    }

    return 0;
}

En mi antiguo MacBook Pro, sin un disco en la unidad de DVD, me dice que ni el disco ni el disco1 son unidades de CD. Con un disco cargado (y el código fijado para usar un poco de velocidad sin firmar), informa/dev/disk2 como un CD con una velocidad de 4234 kb/s.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top