2014-04-16 10 views
8

C'è un modo per impostare lo stdout in modalità binaria? In quale modalità è stdout senza alcuna operazione, dai miei problemi di debug presumo che sia in modalità testo, è vero?C'è un modo per impostare lo stdout in modalità binaria?

ho cercato funzione:

freopen(NULL,"wb",stdout)

ma il mio programma è si blocca quando lo sto facendo.

+1

Perché? 'stdout' dovrebbe essere compatibile con i terminali di testo. Ottieni la semantica del testo in base alle impostazioni locali correnti. (Nota, C e C++ hanno diversi sistemi locali, e devi agire positivamente per far sì che le impostazioni locali della libreria corrispondano alle impostazioni locali del sistema operativo.) – Potatoswatter

+0

Se hai bisogno di 'modalità binaria' omettere l'output formattato - attenersi all'output non formattato –

+0

Per quale scopo? Sembra una cattiva idea ... – tenfour

risposta

10

ho provato codice presentato di seguito per impostare stdin e stdout in modalità binaria (su Windows):

#ifdef _WIN32 
    #include <io.h> 
    #include <fcntl.h> 
#endif 
... 
#ifdef _WIN32 
    setmode(fileno(stdout),O_BINARY); 
    setmode(fileno(stdin),O_BINARY); 
#endif 

Sotto Linux non può farlo, perché in questo modo la piattaforma binario e il testo è la stessa cosa .

+0

Questo funziona. Puoi testarlo facendo il fwrite ("a \ nb", 1, 3, stdout); Se il file risultante è 3 byte, lo stdout è binario. Senza le chiamate setmode() di cui sopra, si finirà con un file di 4 byte. –

0

La semplice risposta è no. La modalità viene determinata quando viene costruito l'oggetto iostream e non può essere modificato in seguito. Alcune implementazioni possono fornire un modo per farlo in seguito, ma questo non è standardizzato. Su alcune implementazioni, fare un freopen su stdout potrebbe cambiare la modalità, anche se penso che formalmente, questo è vietato in C++. (È l'implementazione definita in C.) E a quanto pare, non funziona sulla tua implementazione.

La soluzione migliore è scoprire in che modo il sistema chiama il dispositivo console ("/dev/tty" sotto Unix; "CONS", penso, in Windows), aprirlo nella modalità desiderata e inviarlo ad esso.

+1

Solo 'CON' piuttosto che' CONS', ma questo non è di aiuto - negli scenari in cui è necessario l'output binario, è improbabile che detto output sia destinato alla console. Probabilmente non avrai * nemmeno * una console. (Lo scenario più tipico è uno script CGI che, ad esempio, genera dinamicamente un file JPEG per un server Web.) –

Problemi correlati