Pregunta

En linux, estoy abriendo un pseudo tty, en el lado maestro.Mientras que no hay ningún cliente en el esclavo lado, la pseudo-tty parece estar haciéndose eco de todo lo que estoy escribiendo para él, que no es lo que estoy esperando.Considere el siguiente código :

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

Cuando ejecuto este programa, yo esperaría que la lectura llame a bloque, sino que se vuelve de inmediato y el readbuf contenido es C.¿Cómo puedo cambiar este comportamiento ?Cuando el esclavo lado, no se abre, me gustaría que el carácter escrito en el maestro lado de desaparecer o ser fifoed para leerlo más tarde por el esclavo lado.

Está cambiando el maestro de lado los atributos de la manera correcta de hacerlo ?

¿Fue útil?

Solución

Pensé que el maestro lado no era una tty, pero al parecer lo es, así que usted puede llamar a las cosas como tcgettattr y tcsetattr, y suprimir el eco.

Otros consejos

Puede usar la llamada de bloqueo getch(). Además, <=> no hará eco del contenido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top