从主方改变伪tty回声模式

时间:2009-01-27 09:52:31

标签: c linux pty

在linux上,我在主端打开一个伪tty。虽然奴隶方没有客户端,但伪tty似乎正在回应我写给他的一切,这不是我所期待的。 考虑下面的代码:

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

当我运行这个程序时,我希望read调用阻塞,但它会立即返回并且readbuf内容为C.如何更改此行为?当从属方未打开时,我希望写在主方的字符要么消失要么被丢弃以供以后读取。

更改主方属性是否正确?

3 个答案:

答案 0 :(得分:1)

我认为主方不是tty,但显然是,所以你可以调用tcgettattrtcsetattr这样的东西,并抑制回声。

答案 1 :(得分:0)

您可以使用阻止getch()来电。 getch()也不会回复内容。

答案 2 :(得分:0)

没有一个较早的答案提供正确的C代码,所以这里是:

struct termios tmios;
tcgetattr(ptfd, &tmios);
tmios.c_lflag &= ~(ECHO);
tcsetattr(ptfd, TCSANOW, &tmios);