Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C] catturare lo standard output

    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

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    117
    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'

  3. #3
    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..

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    86
    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

  5. #5
    Mi sembra di aver capito che stai su un sistema unix like quindi usa la funzione popen

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    86
    Senti visto che ci sei, potresti darmi una mano???

    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???

  7. #7
    codice:
    #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;
     }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.