modifica della modalità di eco pseudo tty dal lato master
Domanda
Su Linux, sto aprendo una pseudo tty sul lato master. Mentre non c'è client dal lato degli schiavi, la pseudo tty sembra fare eco a tutto ciò che gli sto scrivendo, che non è quello che mi aspetto. Considera il seguente codice:
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;
}
Quando eseguo questo programma, mi aspetto che la chiamata in lettura si blocchi, ma invece ritorna immediatamente e il contenuto di readbuf è C. Come posso modificare questo comportamento? Quando il lato slave non è aperto, vorrei che il personaggio scritto sul lato master svanisse o venisse richiamato per una lettura successiva da parte dello schiavo.
Cambiare gli attributi del lato master è il modo giusto per farlo?
Soluzione
Pensavo che il lato master non fosse un tty, ma a quanto pare lo è, quindi puoi chiamare cose come tcgettattr
e tcsetattr
e sopprimere l'eco.
Altri suggerimenti
È possibile utilizzare la chiamata di blocco getch()
. Inoltre <=> non farà eco al contenuto.