當我打開一個終端運行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