Pergunta

No Linux, estou abrindo um tty pseudo no lado do mestre. Embora não haja um cliente no lado do escravo, o tty pseudo parece estar ecoando tudo o que eu estou escrevendo para ele, o que não é o que eu estou esperando. Considere o código folowing:

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 eu executar este programa, eu esperaria a chamada leitura para bloco, mas em vez disso, retorna imediatamente eo conteúdo readbuf é C. Como posso alterar esse comportamento? Ao lado do escravo não é aberto, eu gostaria que o personagem escrito no lado do mestre, quer desaparecer ou ser fifoed para leitura posterior a lado o escravo.

Está mudando lado mestre atribui o caminho certo para fazê-lo?

Foi útil?

Solução

Eu pensei lado o mestre não era um tty, mas aparentemente é, para que possa chamar as coisas como tcgettattr e tcsetattr, e suprimir o eco.

Outras dicas

Você pode usar a chamada getch() bloqueio. Também getch() não vai ecoar o conteúdo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top