在另一个C程序中获取一个C程序的输出到一个variables中

我有2个C程序。 说一个是program-1.c

 int main(){ printf("hello world"); } 

现在在第二个名为program-2.c代码中,我想把第一个代码的输出放到一个variables中,这样我就可以在第二个C代码中将输出“hello world”变成一个variables。

我怎样才能做到这一点?

你可以使用这个popen函数:

 FILE* proc1 = popen("./program1", "r"); // Usual error handling code goes here // use the usual FILE* read functions pclose(proc1); 

您将需要在两个独立的进程中运行这两个程序,然后使用某种IPC机制在两个进程之间交换数据。

在许多操作系统上,可以从一个控制台程序的输出作为下一个控制台的输入

 program-1 > program-2 

然后您可以从标准输入中读取结果

 std::string variable; std::getline(std::cin, variable); 

“一个程序的输出是另一个程序使用管道的输入”的示例代码

 #include <unistd.h> #include <process.h> /* Pipe the output of program to the input of another. */ int main() { int pipe_fds[2]; int stdin_save, stdout_save; if (pipe(pipe_fds) < 0) return -1; /* Duplicate stdin and stdout so we can restore them later. */ stdin_save = dup(STDIN_FILENO); stdout_save = dup(STDOUT_FILENO); /* Make the write end of the pipe stdout. */ dup2(pipe_fds[1], STDOUT_FILENO); /* Run the program. Its output will be written to the pipe. */ spawnl(P_WAIT, "/dev/env/DJDIR/bin/ls.exe", "ls.exe", NULL); /* Close the write end of the pipe. */ close(pipe_fds[1]); /* Restore stdout. */ dup2(stdout_save, STDOUT_FILENO); /* Make the read end of the pipe stdin. */ dup2(pipe_fds[0], STDIN_FILENO); /* Run another program. Its input will come from the output of the first program. */ spawnl(P_WAIT, "/dev/env/DJDIR/bin/less.exe", "less.exe", "-E", NULL); /* Close the read end of the pipe. */ close(pipe_fds[0]); /* Restore stdin. */ dup2(stdin_save, STDIN_FILENO); return 0; } 

干杯….

在Windows上,你可以使用这个例子…

 #include <iostream> #include<time.h> using namespace std; int main() { int a=34, b=40; while(1) { usleep(300000); cout << a << " " << b << endl; } } #include<iostream> using namespace std; int main() { int a, b; while(1) { cin.clear(); cin >> a >> b; if (!cin) continue; cout << a << " " << b << endl; } } 

您必须观察并设置usleep()值才能成功获取来自其他程序输出的输入。 同时运行这两个程序。 请享用..:)

在程序2.c的代码中,你应该使用int argcchar *argv[]来获得程序1.c的输出

所以程序2.c应该是这样的:

 void main(int argc, char *argv[]) { int i; for( i=0; i<argc; i++ ) { printf("%s", argv[i]); //Do whatever you want with argv[i] } } 

然后在命令提示符program-1 > program-2