изменение режима псевдо-tty echo со стороны мастера

StackOverflow https://stackoverflow.com/questions/482818

  •  20-08-2019
  •  | 
  •  

Вопрос

В Linux я открываю псевдо-терминал на главной стороне.Хотя на подчиненной стороне нет клиента, псевдо-терминал, похоже, повторяет все, что я ему пишу, а это не то, чего я ожидаю.Рассмотрим следующий код:

int  main(int argc, char * argv[])
{
    int ptyfd;
    int rc;     /* return code */
    char readbuf[3];
    ptyfd = open("/dev/ptmx", O_RDWR | O_NOCTTY);
    die_on_error(ptyfd, "open ptmx");

    /* unlock and print slave name */
    rc = unlockpt(ptyfd);
    die_on_error(rc, "unlockpt");
    printf("Slave pts name : %s\n", ptsname(ptyfd));

    write(ptyfd, "C", 1);
    rc=read(ptyfd, readbuf, 1);
    die_on_error(rc, "read");
    printf("read returned %c\n",readbuf[0]);
    return 0;   
}

Когда я запускаю эту программу, я ожидал, что вызов чтения заблокируется, но вместо этого он немедленно возвращается, а содержимое readbuf — C.Как я могу изменить это поведение?Когда ведомая сторона не открыта, я бы хотел, чтобы символ, написанный на главной стороне, либо исчез, либо был помещен в папку для последующего чтения ведомой стороной.

Является ли изменение атрибутов главной стороны правильным способом?

Это было полезно?

Решение

Я думал, что главная сторона не является терминалом, но, видимо, это так, поэтому вы можете вызывать такие вещи, как tcgettattr и tcsetattr, и подавить эхо.

Другие советы

Вы можете использовать блокировку getch() вызов.Также getch() не будет повторять содержимое.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top