当我打开运行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/

10-13 04:53