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

    Problema freopen

    Se redirigo l'output su file così:
    codice:
    freopen("nuovo_file", "wb", stdout);
    funziona, il problema è quando voglio ripristinare il normale flusso, cioè fare in modo che i dati vengano di nuovo stampati a schermo, invece che su "nuovo_file".

    Grazie,
    Marco.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non ti basta una

    fclose(stdout);


    ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    bisogna sperare di non aver bisogno di reindirizzare l'output sullo schermo perchè non serve neanche salvare il puntatore e poi fare il restore.
    Prova a leggere qui
    http://c-faq.com/stdio/undofreopen.html

    ciao
    sergio

  4. #4
    Non posso rimpiazzare stdout con una variabile globale, perchè a scrivere su stdout non è il mio programma, ma una libreria usata da esso.
    Questa libreria scarica delle pagine html via http, io con freopen le reindirizzo su un file temporaneo, poi però non posso più ristampare su stdout.
    Ho visto, questa soluzione, che andrebbe bene se fosse portabile.
    Se quest'ultima soluzione è fattibile anche su sistemi windows, in altro modo ovviamente, allora andrebbe bene.
    Tutto sto casino è per evitare di utilizzare variabili globali.

  5. #5
    Per linux ho risolto così:
    codice:
    int uv_system_undo_freopen(UV_FILEINFO *stdout_info, FILE *original_stream) {
    
       if(isNULL(stdout_info)) {
    
          return -1;
          
       }
    
       fflush(original_stream);
    
    #if SYSTEM == LINUX
    
       if(dup2(stdout_info->fd, fileno(original_stream)) == -1) {
    
          perror("UV_SYSTEM_CORE_LINUX => dup2 failed");
          return -1;
          
       }
       
       close(stdout_info->fd);
    
    #elif SYSTEM == WIN32
    
       #error "Windows version still in working."
    
    #else
    
       #error "System not supported"
    
    #endif
    
       clearerr(original_stream);
       fsetpos(original_stream, &stdout_info->fpos);
    
       return 0;
    
    }
    La struttura UV_FILEINFO, contiene solo la posizione e il file descriptor del nuovo stream verso cui viene indirizzato stdout.
    Per windows non so' come fare, oregon !!!

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.