LINUX.ORG.RU

IO port


0

0

#include <stdio.h> #include <errno.h> #include <unistd.h> #include <sys/io.h>

int main() {

unsigned char c; if (ioperm(0x378,1,1) < 0) { perror("ioperm"); return 1; } c = inb_p(0x378); putchar(c); return 0; }

Пускаю от rootа, Segmentation Fault Что делаю не так?


kernel 2.6.10 gcc 3.4.2

Motl
() автор топика

> c = inb_p(0x378);

это где определено?

если вы тащите это определение из kernel headers,
то там засада: slow_down_io()

idle ★★★★★
()

На порт 0x80 тоже ioperm делать надо, эти макросы туда задержку справляют

Chumka ★★★
()

Эта ошибка возникает, если порт занят
А он и блокируется програмой после первого выполнения.
К конце кода нужно добавить ioperm(PORT+,1,0); для его закрытия

anonymous
()
Ответ на: комментарий от anonymous

> Эта ошибка возникает, если порт занят
> К конце кода нужно добавить ioperm(PORT+,1,0); для его закрытия

это вы что-то очень неправильное говорите.

ioperm не занимает и не блокирует порт, а только
разрешает/запрещает читать/писать в него.

idle ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.