Enviado em 25/11/2018 - 10:37h
Olá pessoal !
Tenho esse código:
//-------------------------------------------------------------------
//
// ARQUIVO:
// redirect.c
//
// COMPILE:
// redirect.c -o redirect -Wall
//
//-------------------------------------------------------------------
//
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <io.h>
#include <fcntl.h>
//#include <windows.h>
#define STRING_LEN 50000
char string [STRING_LEN+1];
int out_pipe[2];
int saved_stdout;
int main (void) {
saved_stdout = dup (STDOUT_FILENO); // salva stdout para no final restaurar
#ifdef WIN32
if (_pipe (out_pipe, sizeof(string), O_BINARY) != 0 ) {
#endif
#ifdef __linux__
if (pipe(out_pipe) != 0 ) {
#endif
exit(1);
}
dup2 (out_pipe[1], STDOUT_FILENO); // REdireciona stdout para o pipe
close (out_pipe[1]);
// so para testar ...
// system ("gcc -v"); //------------------- LINHA 42 ---------------------
system ("hello"); // meu programa teste
printf ("HELLO WORLD\n");
fflush (stdout);
read (out_pipe[0], string, STRING_LEN); // ler o pipe ... "string"
dup2 (saved_stdout, STDOUT_FILENO); // restaura stdout para teste
printf("MY_STRING(\n%s)\n", string);
return 0;
}
Usando a linha 42 NAO FUNCIONA: system ("gcc -v");
Usando a linha 43 funciona: system ("hello");
PERGUNTAS:
01 - O quem tem o GCC que não consegue REdirecionar para o string ? ... LINHA 42 do código.
02 - Alguém sabe como fazer para executar o GCC ( lLINHA 42 ) e a saida ser REdirecionada para o string ?
INFO: Executando "o meu programa hello" | system ("hello"); // meu programa teste ... LINHA 43
A saida sai correta assim:
MY_STRING(
Hello World -- My program
HELLO WORLD
)
Meu Programa:
#include <stdio.h>
int main (void) {
printf ("Hello World -- My program\n");
return 0;
}
Fui claro ?
Grato !