如何在不关闭管道的情况下通过管道发送文件结尾?

Dav*_*d X 2 c pipe

当我打开运行bash的终端并输入以下内容时:

cat\nfoo\n^Decho bar\n
Run Code Online (Sandbox Code Playgroud)

(其中\n是输入,^ D是control-d)我得到:

foo
bar
Run Code Online (Sandbox Code Playgroud)

即,^ D导致猫退出,但我仍然可以输入更多.
如何通过C中的(unix)管道发送相同的输入(特别是文件结尾)?

sar*_*old 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)等),并且任何过程可以连接到终端从提供交互式环境就像坐在控制台.

Unix环境中高级编程,Stevens和Rago的第2版​​本书,有关使用伪终端设备来控制从属程序的精彩章节 - 包括一个优秀的小pty程序,允许以类似于的方式驱动"交互式"程序expect(1),但是在C而不是tcl.