我有2个C程序。
假设一个是program-1.c
int main(){
printf("hello world");
}
现在在名为program-2.c
的第二个代码中,我希望将第一个代码的输出转换为变量,
这样我就可以将输出“hello world”输入到第二个C代码中的变量中。
我该怎么做?
答案 0 :(得分:11)
您可以使用popen
功能:
FILE* proc1 = popen("./program1", "r");
// Usual error handling code goes here
// use the usual FILE* read functions
pclose(proc1);
答案 1 :(得分:2)
您需要在两个独立的进程中运行这两个程序,然后使用某种IPC机制在两个进程之间交换数据。
答案 2 :(得分:2)
在许多操作系统上,您可以从一个控制台程序获取输出作为下一个输入,也许
program-1 > program-2
然后您可以从标准输入
中读取结果std::string variable;
std::getline(std::cin, variable);
答案 3 :(得分:2)
“一个程序的输出是使用管道输入另一个程序”的示例代码
#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;
}
...干杯
答案 4 :(得分: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()值以成功获取其他程序输出的输入。同时运行两个程序。享受..:)
答案 5 :(得分:0)
在program-2.c的代码中,您应该使用int argc
和char *argv[]
来获取program-1.c的输出
所以program-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