изменение режима псевдо-TTY эхо со стороны мастера - PullRequest
2 голосов
/ 27 января 2009

В 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;   
}

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

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

Ответы [ 2 ]

1 голос
/ 27 января 2009

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

0 голосов
/ 12 ноября 2009

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

...