PDA

Visualizza la versione completa : [C] Catturare lo standard output


devilfire
14-02-2006, 16:30
Ciao
sto facendo un programma in c e mi serve catturare lo standaroutput di un programma.
per la precisione sto inplementando la redirezione
esempio: ls > pippo
deve scrivere il risultato di ls nel file pippo...
il problema che non capisco come posso prendere l'output di ls per poi trasferirlo.
ideE?
grazie

{Bl4d3}
14-02-2006, 16:43
la redirezione la stai effettuando da linea di comando? se cos usa la pipe.

programma | altroprogramma | altroprogramma

esempio:
less prova | grep qualcosa >pippo

less scrive(rebbe) su stdout il contenuto di prova, la | redirige lo stdout di less nello stdin di grep che scrive nel file pippo tutte le linee che contengono 'qualcosa'

devilfire
14-02-2006, 16:57
non ci siamo capiti..

quello che devo fare io implementare una shell che effettua l'operazione di redirezione. quindi, nel momento in cui l'user digita ls > caio, io prendo l'output di ls e lo scrivo su file.

cos ho pensato di procedere:

1) creo il file di nome "caio"
2) eseguo ls e prelevo il suo ouput (o il puntatore all'out)
3) copio il contenuto del puntatore nel file creato.

il mio problema quindi capire come prendere l'output di ls.. adesso sto leggendo il manuale di dup2, sono convinto sia necessario usarlo.. ma non che qualcuno sa dirmi qualcosa di pi???

grazie, spero di esser stato esaustivo.. ;)

spelux
25-10-2006, 19:01
Vorrei riaprire il seguente thread e riprendere il discorso, allora mi sono fatto un programmino in cui all'interno tramite una execve mi esegue un bel ping. A me servirebbe di prelevare l'output fornito dal ping ed elaborarne le informazioni.

Come posso fare per catturare l'output?

Grazie :ciauz:

zero85
27-10-2006, 03:55
Mi sembra di aver capito che stai su un sistema unix like quindi usa la funzione popen (http://www.cact.unile.it/facilities/XC6000/html-man/gapil/gapilsu182.html)

spelux
29-10-2006, 13:24
Senti visto che ci sei, potresti darmi una mano??? :dh: :dh:

Allora, forse ho capito male il popen....io ho fatto una cosa simile:

FILE* pipe;

...

pipe = popen("ping -c3 localhost","r");
dup2(fileno(pipe),STDOUT_FILENO);

ma poi???
:dh: :dh:

zero85
29-10-2006, 14:38
#include <stdio.h>
#include <stdlib.h>

int main()
{
char *cmd = "/usr/bin/ls -la";
char buf[BUFSIZ];
FILE *ptr;

if ((ptr = popen(cmd, "r")) != NULL)
{
while (fgets(buf, BUFSIZ, ptr) != NULL)
printf("%s", buf);
pclose(ptr);
}
return 0;
}

Loading