Domanda

sto distribuendo un software che utilizza un disco ottico, e alla velocità piena di default è troppo rumoroso per essere accettabile. Il mio obiettivo è quello di ridurre la velocità del disco utilizzando ioctl, ma non so come trovare / dev / disk (n) da / Volumes / MyDisk / Application.

Quello che segue è quello che ho finora, ma io non voglio che il percorso del disco hard-coded.

#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;
}
È stato utile?

Soluzione

Si può avere di camminare per le voci del disco in dev /, aprire ogni e quindi utilizzando qualche altro ioctl () per identificare il loro 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;
}

Sul mio vecchio MacBook Pro, senza un disco nell'unità DVD, mi dice che né disk0 né disk1 sono unità CD. Con un disco caricato (e il codice fisso per utilizzare un unsigned short velocità), esso segnala / dev / disk2 come un CD con una velocità di 4234 KB / s.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top