我有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 argc
和char *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