Linux
如何從另一個終端讀取?
我打開了兩個終端(/dev/pts/1 和 /dev/pts/2)並從 /dev/pts/1 啟動了我的應用程序。我想從 /dev/pts/2 實時讀取,但我的程式碼不起作用:實際上一些符號顯示在 /dev/pts/1 上,其中一些顯示在 /dev/pts/ 2
FILE *f = fopen("dev/pts/2", "r"); while(1) { char current = fgetc(f); printf("%c", current); fflush(0); }
您有兩個程序從
/dev/pts/2
. 一個是在那裡執行的 shell(或某些應用程序),另一個是您在pts/1
. 哪個讀取可用字節更快是隨機的。
正如@egmont 所說,在您輸入的終端中(在您的情況下,它是
/dev/pts/2
),shell 也會讀取您的輸入。因此,您應該阻止 shell 讀取它,並且在另一個終端中執行的程序(在您的情況下是/dev/pts/1
)可以完全讀取輸入。您可以啟動一個簡單的死循環程序,它根本不從輸入中讀取
/dev/pts/2
,這將阻止 shell 讀取輸入。C語言的完整原始碼如下所示,是的,你甚至不需要#include<stdio.h>
int main(){ while(1); }
然後您就可以在 中啟動應用程序了
/dev/pts/1
,主要部分原始碼如您所提供,完整的原始碼如下:#include<stdio.h> int main(){ FILE* fp=fopen("/dev/pts/2","r"); while(1){ char c=fgetc(fp); if(c==-1)break; fputc(c,stdout); } return 0; }
請注意,您應該在另一個程序之前啟動死循環,還請注意,您應該
/dev/pts/2
在死循環程序執行時輸入您的輸入。此外,只有當您按下 時Enter
,應用程序才會/dev/pts/1
獲得輸入,並且newline
字元也會被讀取。當您執行這兩個程序時,兩個終端如下所示
/dev/pts/2
:$ ./dead_loop abc d
並在
/dev/pts/1
:$ ./my_application abc d