【发布时间】:2015-03-24 20:47:05
【问题描述】:
我尝试通过简单地使用打印到另一个终端
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 中运行的程序如何接收这些字符?
【问题讨论】:
-
这是因为 pts 是一个伪终端从站 - 一个连接到“伪终端主站”的双向通道(大多数系统上为
/dev/ptmx)。所以可能 /dev/pts/0 已经在使用中并且有人试图从中读取,尝试lsof | grep /dev/pts/0(Linux-specific)来检查它。
标签: c linux unix linux-device-driver