el cambio de pseudo tty modo de eco desde el lado maestro
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 ?
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.