2

在 linux 上,我在 master 端打开了一个伪 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。我怎样才能改变这种行为?当从端没有打开时,我希望主端写的字符要么消失,要么被从端读取。

更改主侧属性是正确的方法吗?

4

3 回答 3

1

我以为 master 端不是 tty,但显然它是,所以你可以调用诸如tcgettattrand之类tcsetattr的东西,并抑制回声。

于 2009-01-27T10:23:16.477 回答
1

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

struct termios tmios;
tcgetattr(ptfd, &tmios);
tmios.c_lflag &= ~(ECHO);
tcsetattr(ptfd, TCSANOW, &tmios);
于 2019-11-19T07:35:47.940 回答
0

您可以使用阻塞getch()调用。也getch()不会回显内容。

于 2009-11-12T14:00:20.003 回答