当我打开一个终端运行bash和键入以下内容:如何通过管道发送文件结束而不关闭管道?
cat\nfoo\n^Decho bar\n
(其中\ n被输入和^ d是控制-d)获得:
foo
bar
即,^ d原因猫退出,但我仍然可以输入更多。
如何通过C中的(unix)管道发送相同的输入(特别是文件结束)?
当我打开一个终端运行bash和键入以下内容:如何通过管道发送文件结束而不关闭管道?
cat\nfoo\n^Decho bar\n
(其中\ n被输入和^ d是控制-d)获得:
foo
bar
即,^ d原因猫退出,但我仍然可以输入更多。
如何通过C中的(unix)管道发送相同的输入(特别是文件结束)?
xterm
不会通过shell和实用程序通过pipe(7)
s执行输入。相反,它使用Unix PTY框架(有关信息,请参阅pty(7)
,openpty(3)
,forkpty(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
。
Control-D对终端而言是特殊的,而不是一般的输入。只需关闭管道。
不,我的意思是我该如何从当前读取的管道读取EOF,然后继续写入(如/ usr/bin/xterm)? – 2012-01-04 01:26:19
导致读者收到EOF错误的唯一方法是文件在最后;在所有可能的作者都关闭访问权限之前,管道永远不会结束。 EOF不是读取的字符,而是文件的状态。 – mah 2012-01-04 01:30:33
那么/ usr/bin/xterm(和其他终端仿真器)如何将EOF发送到其子进程? – 2012-01-04 01:33:24
......哇,我真的忘了unix是多么的糟糕。 +1,希望将pty打入半工作管道界面不会太难。 – 2012-01-04 01:41:37