在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.如何更改此行为?当从属方未打开时,我希望写在主方的字符要么消失要么被丢弃以供以后读取。
更改主方属性是否正确?
答案 0 :(得分:1)
我认为主方不是tty,但显然是,所以你可以调用tcgettattr
和tcsetattr
这样的东西,并抑制回声。
答案 1 :(得分:0)
您可以使用阻止getch()
来电。 getch()
也不会回复内容。
答案 2 :(得分:0)
没有一个较早的答案提供正确的C代码,所以这里是:
struct termios tmios;
tcgetattr(ptfd, &tmios);
tmios.c_lflag &= ~(ECHO);
tcsetattr(ptfd, TCSANOW, &tmios);