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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top