Код: Выделить всё
#include <stdio.h>
#include <unistd.h>
#include <asm/io.h>
#define BASEPORT 0x378 /* lp1 */
int main()
{
int a = 0;
int statuses[100];
struct timespec sleep_time = { 0 /* seconds */, 160000 /* nanoseconds */ };
/* Получить доступ к порту */
if (ioperm(BASEPORT, 3, 1)) {perror("ioperm"); exit(1);}
/* Вывод в порт (0) */
outb(0, BASEPORT);
/* Задержка (100 мс) */
usleep(100000);
while a<100 {
/* Чтение из порта (BASEPORT+1) и вывод результатов на экран */
statuses[a] = inb(BASEPORT + 1);
nanosleep(&sleep_time, NULL); //спим 160 мкс
a++;
}
for(a = 0; a != 100; ++a) {
printf("Status %d\n", statuses[a]);
}
/* Мы больше не нуждаемся больше в порту */
if (ioperm(BASEPORT, 3, 0)) {perror("ioperm"); exit(1);}
return 0;
}Пока физической возможности проверить программу нет... правильно ли я использую nanosleep? Может быть дадите ещё советы как оптимизировать исходный код, или как запускать программу, чтобы она получала больший приортитет в системе.