38d1736f

Альтернативный способ: /dev/port


Другой путь доступа к портам ввода/вывода лежит через открытие файла /dev/port (символьное устройство - major 1, minor 4) на чтение и/или запись (функции f*() из stdio.h работают через буфер, поэтому избегайте их). Затем выполняем lseek() на необходимый байт в файле (позиция файла 0 = порт 0x00, позиция файла 1 = порт 0x01, и т.д.), и считываем/записываем байт или слово при помощи read() или write().

Естественно, для работы программы вам нужен доступ на чтение/запись к файлу /dev/port. Этот способ конечно медленней, чем стандартный, но не требует ни оптимизации при компиляции, ни ioperm(). Кроме того, если вы дадите доступ соответствующим пользователю/группе к файлу /dev/port, вашей программе не нужны права root --- впрочем, это не очень хорошая вещь с точки зрения безопасности, поскольку это может нарушить работу системы путем получения прав root через доступ к диску, сетевой плате и т.д. напрямую.



Содержание раздела