当我打开运行bash的终端并输入以下内容时:
cat\nfoo\n^Decho bar\n
(其中输入\ n,而^ D为control-d)我得到:
foo
bar
即,^ D导致cat退出,但我仍然可以输入更多内容。
如何通过C中的(unix)管道发送相同的输入(特别是文件结尾)?
最佳答案
xterm
不会通过pipe(7)
使用shell和实用程序执行其输入。相反,它使用Unix PTY框架(有关某些信息,请参见pty(7)
,openpty(3)
,forkpty(3)
,posix_openpt(3)
,pts(4)
联机帮助页)。 PTY框架允许任何进程充当终端“主机”(例如,telnetd(8)
,sshd(8)
,xterm(1)
等),并且任何进程都可以连接到终端从机以提供交互式环境,就像坐在控制台。
Advanced Programming in the Unix Environment, 2nd edition撰写的Stevens and Rago书中有一章非常出色,涉及使用伪终端设备来控制从程序-包括一个出色的小pty
程序,该程序允许以类似于expect(1)
的方式来驱动“交互式”程序,但是在C中而不是tcl
中。
关于c - 如何通过管道发送文件结束而不关闭管道?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8720947/