Question

Sous Linux, j'ouvre un pseudo tty du côté du maître. Bien qu'il n'y ait pas de client du côté esclave, le pseudo tty semble faire écho à tout ce que je lui écris, ce qui n'est pas ce que j'attendais. Considérons le code suivant:

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

Lorsque j'exécute ce programme, l'attente de lecture doit être bloquée, mais elle retourne immédiatement et le contenu de readbuf est C. Comment puis-je modifier ce comportement? Lorsque le côté esclave n’est pas ouvert, je voudrais que le caractère écrit du côté maître disparaisse ou soit supprimé pour une lecture ultérieure par le côté esclave.

Changer les attributs du maître est-il la bonne façon de le faire?

Était-ce utile?

La solution

Je pensais que le côté maître n'était pas un tty, mais apparemment, c'est vrai, vous pouvez donc appeler des choses comme tcgettattr et tcsetattr et supprimer l'écho.

Autres conseils

Vous pouvez utiliser l'appel bloquant getch(). De même, <=> ne fera pas écho au contenu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top