CD-ROM Cela fonctionne sous Linux, mais pas (comme je voudrais) sur FreeBSD:Random Seek sur le lecteur
Je souhaite exercer mon lecteur de CD-ROM, pour garder la poussière de l'objectif. Sous Linux, je cours (en tant que root) un programme en C que j'ai écrit et qui cherche et recule, en lisant un seul bloc à chaque fois. Sur FreeBSD, ce programme ne va pas trop loin. Je peux ouvrir l'appareil et chercher à (disons) le bloc 1. Mais quand j'essaie de lire le bloc, j'obtiens l'erreur 22 (EINVAL). Il échoue lors de la première lecture, au bloc 1, si le périphérique est monté ou non (-t cd9660). Comment dois-je procéder? Le programme complet est here. L'extrait pertinent:
lo_fd=Open(ar_argv[1],
O_RDONLY,
0
);
lo_high_bit=1;
while(lo_high_bit>0)
{
if(lseek(lo_fd,
lo_high_bit,
SEEK_SET
)
==
(off_t)-1
)
{
lo_high_bit>>=1;
break;
}
if(read(lo_fd,
lo_buffer,
1
)
!=
1
)
{
lo_high_bit>>=1;
break;
}
lo_high_bit<<=1;
}
On dirait que vous lisez un octet à la fois. Vous pourriez avoir besoin de lire tout un secteur/bloc. –
@Andrew: Merci, vous m'avez mis sur la bonne voie. –
(Pas besoin d'ajouter "RESOLU" à un titre.Si votre propre réponse fonctionne, vous êtes libre (et même encouragé!) De le marquer comme la réponse 'acceptée'.) – usr2564301