Frage

Unter Linux, ich bin ein Pseudo-tty auf der Master-Seite zu öffnen. Zwar gibt es keinen Client auf der Slave-Seite ist, scheint die Pseudo-tty Echo alles zu ich ihn schreibe, was nicht das, was ich erwarte. Betrachten Sie den Folowing Code:

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

Als ich dieses Programm ausführen, würde ich die Lese Anruf erwarten, zu blockieren, sondern es sofort zurück und der readbuf Inhalt ist C. Wie kann ich dieses Verhalten zu ändern? Wenn die Slave-Seite nicht geöffnet wird, würde ich das Zeichen auf der Master-Seite geschrieben wie entweder verschwinden oder von der Slave-Seite zum späteren Lesen fifoed werden.

Ist die Änderung der Master-Seite Attribute den richtigen Weg, es zu tun?

War es hilfreich?

Lösung

dachte ich, die Master-Seite war kein tty, aber anscheinend ist es, so dass Sie Dinge wie tcgettattr und tcsetattr nennen können, und das Echo zu unterdrücken.

Andere Tipps

Sie können die Blockierung getch() Aufruf verwenden. Auch getch() nicht den Inhalt Echo.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top