【问题标题】:How to properly accept input from another terminal (say, pts/1)?如何正确接受来自另一个终端(例如 pts/1)的输入?
【发布时间】: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


【解决方案1】:

如果两个进程都从同一个终端读取,则输入数据的每一位将只发送到两个进程中的一个。因此,您看到的是数据的一个子集,而您在终端上运行的 shell 或其他程序正在获取剩余的数据。

输出也是两个进程创建的输出的组合,但这与您直观地想要的结果相对应。 (即你的shell可能在实验过程中没有输出任何东西,而你输出的是“hello”,nothing和“hello”的组合就是“hello”。)

【讨论】:

    猜你喜欢
    • 2013-10-23
    • 2022-11-16
    • 2018-04-10
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多