Newsgroup: it.comp.os.linux.development
Titolo: Eseguire un programma dall'interno di un altro programma

Come si  fa in C  ad invocare l'esecuzione di  un programma esterno  e a
catturarne l'output? (magari in una stringa....)
-- 
Non c'è più forza nella normalità: c'è solo monotonia.

catturarne l'output? (magari in una stringa....)
Devi aprire delle pipe con il figlio e poi usare dup per attaccarle a
stdin/out/err.
-- 
ciao, | [Per rispondere togli "toglimi" dal mio indirizzo.]
Marco | * The Internet is full. Go away.  -- Joel Furr *
      | (Ri)scoprire fidonet: 
http://bbs.mi.linux.it

catturarne l'output? (magari in una stringa....)
prova 
  system("progr > output");
  fp=fopen ("output", "r");
  /*...ecc..ecc....*/
forse c'e' un modo per evitare il file temporaneo,
ma ora non mi viene in mente :-(
-- 
" Ho visto cose, che voi umani non potreste immaginare.
Sequenze RTSCTS in fiamme al largo dei bastioni di Termios.
Ho visto stringhe C balenare nel buio vicino alle porte UART.
E tutti quei momenti andranno perduti per sempre, come lacrime nella pioggia.
E' tempo di morire... "

 stdin/out/err.
grazie per l'aiuto  Marco, ma potresti per piacere farmi  un esempio con
del codice? Un'altra cosa, mi sai segnalare un buon manuale C on line?
Ciao


   /*...ecc..ecc....*/
non  è un  problema il  file temporaneo,  lo creo  in /tmp  e finita  la
funzione lo  cancello. Dopo tutto  non è  che il programma  debba essere
così perfettamente ottimizzato.


 catturarne l'output? (magari in una stringa....)
digita :  man 3 exec
-- 
   ////     \\\\  
//// NamkoTech \\\\
  ////       \\\\

catturarne l'output? (magari in una stringa....)
popen(), e apri una pipe. Da li' leggi l'output.
Leonardo
".signature": bad command or file name

grazie per l'aiuto  Marco, ma potresti per piacere farmi  un esempio con
fd = open(...);
dup2(fd, 0);
dup2(fd, 1);
dup2(fd, 2);
close(fd);
exec(...)


 così perfettamente ottimizzato.
Se devi soltanto leggere o soltanto scrivere, puoi usare popen(3).
-- 
  /Kinkie
Se sulla scatola c'e` scritto "Per windows 95 e superiori", dovrebbe
funzionare sotto Linux, vero?

> stdin/out/err.
OC> grazie per l'aiuto  Marco, ma potresti per piacere farmi  un esempio con
OC> del codice? Un'altra cosa, mi sai segnalare un buon manuale C on line?
non sono molto ferrato in queste cose, ma dovrebbe bastare
/*---------------------------------------------------------------*/
#include <stdio.h>
int main(void)
{
char buf[80];
FILE *input;
        input = popen("ls -l", "r");
        while(fgets(buf, 80, input))
                printf("%s", buf);
        pclose(input);
        return 0;
}
/*--------------------------------------------------------------*/
oppure...
/*--------------------------------------------------------------*/
#include <stdio.h>
#include <unistd.h>
char buf[80];
int main(void)
{
int fds[2];
FILE *input;
        pipe(fds);
        if (fork()==0)
        {
                close(fds[0]);
                dup2(fds[1], 1);
                execl("/bin/ls", "ls", "-l", 0);
                exit(0);
        }
        close(fds[1]);
        input = fdopen(fds[0], "r");
        while(fgets(buf, 80, input))
                printf("%s", buf);
        fclose(input);
        return 0;
}
/*-------------------------------------------------------------*/
-- 
ciao,
Claudio