Получить выходные данные одной C-программы в переменную другой C-программы - PullRequest
5 голосов
/ 04 января 2012

У меня есть 2 программы.Скажем, один program-1.c

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

Теперь во 2-м коде с именем program-2.c я хочу вывод 1-го кода в переменную, чтобы я мог получить вывод "hello world" в переменную в2-й код С.

Как я могу это сделать?

Ответы [ 6 ]

11 голосов
/ 04 января 2012

Для этого можно использовать функцию popen:

FILE* proc1 = popen("./program1", "r");
// Usual error handling code goes here
// use the usual FILE* read functions
pclose(proc1);
2 голосов
/ 04 января 2012

Пример кода для «Вывод одной программы является вводом другой программы с использованием труб»

#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;
}

Cheers ....

2 голосов
/ 04 января 2012

Во многих операционных системах вы можете получить выходные данные одной консольной программы как входные данные для следующей, возможно,

program-1 > program-2

затем вы можете прочитать результат со стандартного ввода

std::string  variable;

std::getline(std::cin, variable);
2 голосов
/ 04 января 2012

Вам нужно будет запустить две программы в двух отдельных процессах, а затем использовать какой-то механизм IPC для обмена данными между двумя процессами.

0 голосов
/ 09 января 2012

В коде для программы-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

0 голосов
/ 04 января 2012

В 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 (), чтобы успешно получить ввод с выхода другой программы.Запустите обе программы одновременно.Наслаждайтесь ..:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...