当我打开运行bash的终端并键入以下内容时:
cat\nfoo\n^Decho bar\n
(其中\ n是输入,^ D是control-d)我得到:
foo
bar
即,^ D导致猫退出,但我仍然可以输入更多 如何通过C中的(unix)管道发送相同的输入(特别是文件结尾)?
答案 0 :(得分:6)
xterm
不会通过pipe(7)
s对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
。
答案 1 :(得分:3)
Control-D对终端是特殊的,而不是一般输入。只需关闭管道。