Как читать из Com-порта?

Linux у меня установлен на VirtualBox. Виртуальную машину я настроил на 1 com port и связал с ним файл на хосте. Записывать данные побайтово у меня получается (Открыл мой файл на основной машине для проверки), а вот читать — нет. Выводит одни нули в терминал. Вот код:

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

void initPort (int port){
    if (ioperm (port, 3, 1)){
    perror ("ioperm");
    }
    else {
    outb(0x0C, port+2);
    outb(0x08, port+2);

    printf ("OK start\n");
    }
  }

  int writeByteToPort (int port, char ch){

  outb(ch, port);
  outb(0x0D, port+2);
  outb(0x0c, port+2);
  }

int readByteFromPort (int port){
int codeBuffer;
int time =10000;

while (--time > 0){
    codeBuffer = inb(port+1);

    if (codeBuffer & 0x08 == 0x00) return 2;
    if (codeBuffer & 0x08 == 0x01) break;
    if (time < 1) return 1;

}
printf ("%d", codeBuffer);
return codeBuffer;
}


int main(int argc, char const *argv[])
{
initPort (0x3f8);
char datainPort [12]= "some String\0";

for (int i =0; i < 12; i++) writeByteToPort(0x3f8, datainPort[i]);
int codeBuffer =0;
char dataFromPort [12];
for (int i =0; i < 12; i++){
    codeBuffer = readByteFromPort(0x3f8);
    dataFromPort[i] = (char)codeBuffer;
}
for (int i = 0 ; i<12; i++) printf("%c", dataFromPort[i]);
printf("\n");

return 0;
}

Ответы (1 шт):

Автор решения: eri

Файл - не поддерживает чтение в гостя, нужен пайп или сокет.

Сокет удобнее.

Поставь port mode в tcp, а не файл. Используй PuTTY в режиме telnet чтоб подключиться к этому порту и послать символы с клавиатуры. (отсылаются после нажатия enter).

Для отправки и приёма сырых байтов подойдет старый добрый netcat или socat.

Сэмулировать протокол на стороне хоста можно в пару строчек на питоне.

→ Ссылка