Linux

如何從另一個終端讀取?

  • April 21, 2022

我打開了兩個終端(/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

引用自:https://unix.stackexchange.com/questions/281683