![我可以使用 xterm 读取/写入 pts 而不生成另一个进程(例如 shell)吗?](https://linux22.com/image/28761/%E6%88%91%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%20xterm%20%E8%AF%BB%E5%8F%96%2F%E5%86%99%E5%85%A5%20pts%20%E8%80%8C%E4%B8%8D%E7%94%9F%E6%88%90%E5%8F%A6%E4%B8%80%E4%B8%AA%E8%BF%9B%E7%A8%8B%EF%BC%88%E4%BE%8B%E5%A6%82%20shell%EF%BC%89%E5%90%97%EF%BC%9F.png)
我有一个读取和写入伪终端的进程。我想打开 xterm 并让它打开一个伪终端并将其保持打开状态,以便我可以与此进程进行通信而无需创建另一个进程。
现在我使用以下技巧。我创建了一个简单的程序:
void main() {while(1);}
然后我在 xterm 窗口中打开它,如下所示:
xterm ~/a.out
然后我可以写入另一个进程并在 xterm 窗口上读取其输出。有什么办法可以做到这一点而不让 xterm 产生一些无用的进程吗?
编辑:我尝试与之通信的进程是在 Bochs 模拟器内运行的操作系统。我正在尝试将模拟系统上的串行端口与主机系统上的伪终端连接。我在 Bochs 配置文件中指定特定的伪终端,如下所示:
com1: enabled=1, mode=term,dev=/dev/pts/4
答案1
恐怕你不能 - 这实际上是bochsrc
手册页中推荐的方式。如果您担心额外的过程,您可以生成它而不是简单的循环:
#include <stdio.h>
#include <unistd.h>
int main(void)
{
printf("tty: %s\n", ttyname(0));
while (1)
sleep(60);
return 0;
}
您将获得 tty 名称,并sleep()
确保您不会在微不足道的繁忙循环中浪费宝贵的 SPU 时间。您也可以使用pause()
代替sleep()
.
或者你可以给 Xterm 打补丁,毕竟它是开源的。