Considérez le code suivant:ioctl() remet à zéro appel descripteur de fichier à 0
file_fd = open(device, O_RDWR);
if (file_fd < 0) {
perror("open");
return -1;
}
printf("File descriptor: %d\n", file_fd);
uint32_t DskSize;
if (ioctl(file_fd, BLKGETSIZE, &DskSize) < 0) {
perror("ioctl");
return -1;
}
printf("File descriptor after: %d\n", file_fd);
Ce rendements snippet ceci:
File descriptor: 3
File descriptor after: 0
Pourquoi mon descripteur de fichier get remis à 0? Le programme écrit les choses à stdout
au lieu de mon périphérique de bloc.
Cela ne devrait pas arriver. Je m'attends à ce que mon file_fd
soit différent de zéro et conserve sa valeur.
Alors que 'valgrind' n'a rien détecté, vous avez raison. Je passe l'adresse d'un entier de 4 octets à ioctl, et ioctl s'attend à écrire 8 octets, mais je n'ai alloué que 4. – Gala
@Gala Je suis surpris que 'valgrind' ne le détecte pas. –