Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C] freopen() stdout e poi tornare a quello standard

    Ciao a tutti. Ho provato a scrivere un programma ma volevo salvare su file il risultato di ciò che veniva scritto su stdout da una chiamata a sistema system().
    Ho provato collegando a stdout a un altro file prima della chiamata a system() ma poi subito dopo voglio ricollegarlo allo stream standard, come posso fare?
    Ho provato con un puntatore a FILE* a copiare stdout ma non fa quello che dovrebbe.

    Vi posto il codice.
    Codice PHP:
    /*
     *  ls.c
     *  
     *
     *  Created by Tommaso Ricci on 09/05/11.
     *  Copyright 2011 __MyCompanyName__. All rights reserved.
     *
     */


    #include <stdio.h>

    int main(int argcchar *argv[]) {
        
        
    FILE *stdo1;
        
    char nome[] = "prova.txt";
        
        
    stdo1 stdout;
        
    freopen(nome"w"stdout);
        
        
    system("ls");
        
    stdout stdo1;
        
    printf("%s"nome);
        
        return 
    0;
        

    Il problema è che la printf (la invoco per provare che lo stream torni quello standard) continua a scrivere su prova.txt e non sullo stream standard anche dopo questo mio tentativo (fallito) di rimetterlo a posto.

  2. #2
    perché non usi semplicemente la fprintf per fare ciò che ti interessa?
    fprintf
    all that you need:
    http://www.cplusplus.com/reference/clibrary/

  3. #3
    Originariamente inviato da Celebron
    perché non usi semplicemente la fprintf per fare ciò che ti interessa?
    fprintf
    Perchè la system() invoca il comando ls che scrive su stdout, volevo che quell'output andasse su file... (la conosco la fprintf())

  4. #4
    uhm, a memoria quella che chiedi ricordo essere un operazione non consigliata (anche se il motivo mi sfugge al momento )

    ad ogni modo forse trovi qualche risposta qui
    all that you need:
    http://www.cplusplus.com/reference/clibrary/

  5. #5
    Dovresti usare la popen.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Originariamente inviato da Celebron
    uhm, a memoria quella che chiedi ricordo essere un operazione non consigliata (anche se il motivo mi sfugge al momento )

    ad ogni modo forse trovi qualche risposta qui
    Ho letto ma non penso ci siano soluzioni portabili per fare il redirect degli stream standard e di risettarli di nuovo. Non c'è nessun modo di fare scrivere su un altro stream tutto ciò che potrebbe derivare da una chiamata alla system()???

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Dal momento in cui scrivi "system("ls");" la portabilità già non esiste più. Che problema c'è se usi popen()?
    every day above ground is a good one

  8. #8
    Originariamente inviato da YuYevon
    Dal momento in cui scrivi "system("ls");" la portabilità già non esiste più. Che problema c'è se usi popen()?
    Mah nn era x la portabilità.. cmq era un esempio come un altro il comando "ls", x esempio con win potrei fare "dir".. cmq la mia intenzione era poter leggere l'output generato dalla funzione per poi avere x esempio l'elenco dei files e delle cartelle.

    E' possibile fare ciò con qualche funzione già pronta e portabile? Ditemi che apro un nuovo topic

  9. #9
    Ma perché non usi la popen come ti ho detto?

    Per inciso, per ottenere la lista di file e cartelle ci sono le API specifiche di piattaforma (readdir & co. su sistemi POSIX, FindFirstFile & co. su Windows).
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Originariamente inviato da MItaly
    Ma perché non usi la popen come ti ho detto?

    Per inciso, per ottenere la lista di file e cartelle ci sono le API specifiche di piattaforma (readdir & co. su sistemi POSIX, FindFirstFile & co. su Windows).
    Semplicemente perchè sono incapace e non la conosco!
    Cmq devo ancora capire i thread, i processi... sono tutte cose che nn ho ancora fatto

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.