如何从另一个终端读取数据?

如何从另一个终端读取数据?

我打开了两个终端(/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);
}

答案1

您有两个进程正在读取/dev/pts/2.一个是在那里运行的 shell(或某些应用程序),另一个是您在pts/1.哪一个读取可用字节的速度更快是随机的。

答案2

正如@egmont所说,在终端中输入 input (在你的情况下,它是/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

相关内容