Мы приведем пример программы, которая
Таблица 61
Смещение | Длина | Назначение |
(0) | 2 | Количество дней, прошедших после 1 января 1980 года |
(+2) | 1 | Счетчик минут |
(+3) | 1 | Счетчик часов |
(+4) | 1 | Счетчик сотых долей секунды |
(+5) | 1 | Счетчик секунд |
int io_handle; unsigned count; struct { unsigned days; unsigned char min; unsigned char hours; unsigned char sec_per_100; unsigned char sec; } clock_buf; // Открываем устройство с именем CLOCK$ if( (io_handle = open("CLOCK$", O_RDWR)) == - 1 ) { // Если открыть устройство не удалось, выводим // код ошибки printf("Ошибка при открытии устройства %d",errno); return errno; } // Получаем информацию об устройстве inregs.h.ah = 0x44; inregs.h.al = 0; inregs.x.bx = io_handle; intdos( &inregs, &outregs ); if(outregs.x.cflag == 1) { // При ошибке выводим ее код printf("IOCTL error %x\n",&outregs.x.ax); exit(-1); } // Устанавливаем в 1 бит 5 (переключаем драйвер // в двоичный режим обмена данными inregs.x.dx = (outregs.x.dx | 0x0020) & 0x00ff; // Устанавливаем слово информации об устройстве inregs.h.ah = 0x44; inregs.h.al = 1; inregs.x.bx = io_handle; intdos( &inregs, &outregs ); if(outregs.x.cflag == 1) { // При ошибке выводим код ошибки printf("IOCTL error %x\n",&outregs.x.ax); exit(-1); } // Выводим слово информации об устройстве на экран printf("\nDevice Information: %04X\n", outregs.x.dx); // Читаем 6 байт из устройства в буфер buf // Обмен производится в двоичном режиме if((count = read(io_handle, &clock_buf, 6)) == -1) { // Если при чтении произошла ошибка, // выводим ее код printf("Ошибка чтения %d",errno); return errno; } printf("\nПолучено от драйвера часов CLOCK$:" "\n" "\nПрошло дней после 01.01.80: %d" "\nМинуты: %d" "\nЧасы: %d" "\nСекунды: %d" "\nСотые доли секунды: %d" "\n", clock_buf.days, clock_buf.min, clock_buf.hours, clock_buf.sec, clock_buf.sec_per_100); // Закрываем устройство close(io_handle); exit(0); }