如何正确接受来自另一个终端的输入(比方说,pts / 1)?

时间:2015-01-26 12:27:03

标签: c linux unix linux-device-driver

我尝试使用

打印到另一个终端
fd=open("/dev/pts/0",O_RDWR);
write(fd,"hello",5);

它运作正常。但是我尝试以相同的方式读取一系列字符,看起来输入顺序不一致。

fd=open("/dev/pts/0",O_RDWR);
read(fd,&ch1,1);
read(fd,&ch2,1);
read(fd,&ch3,1);

并且我在pts / 0中输入了数据“abcde”,但是当我打印输出时,我得到了“acd”,有时我会得到“bce”。有人可以解释这种行为吗?我在某地读过Unix不允许来自其他终端的输入,但即便如此,这些字符是如何被pts / 1中运行的程序接收的?

1 个答案:

答案 0 :(得分:0)

如果两个进程都从同一个终端读取,则每个输入数据位只会进入两个进程中的一个。所以你看到了数据的一个子集,你在终端上运行的shell或其他程序正在获取剩余的数据。

输出也是两个进程创建的输出的组合,但这与您想要的直观对应。 (即,你的shell可能在实验期间没有输出任何内容,你输出“hello”,没有任何组合和“hello”是“你好”。)