Рассмотрим следующий код:IOCTL() вызов сбрасывает дескриптор файла в 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);
Этот фрагмент кода урожайности это:
File descriptor: 3
File descriptor after: 0
Почему мой дескриптор файла получить сброс до 0? Программа записывает материал в stdout
вместо моего блочного устройства.
Этого не должно быть. Я ожидаю, что мой file_fd
будет отличным от нуля и сохранит его значение.
Хотя 'valgrind' ничего не обнаружил, вы правы. Я передаю адрес целого числа из 4 байтов в ioctl, а ioctl рассчитывает записать 8 байтов, но я выделил только 4. – Gala
@Gala. Я удивлен, что 'valgrind' не обнаруживает его. –