Freopen Stdout Binario Options
La semplice risposta è no. La modalità è determinata quando l'oggetto iostream è costruito, e non può essere modificata in seguito. Alcune implementazioni possono fornire un mezzo di farlo in seguito, ma questo non è standardizzato. Su alcune implementazioni, facendo un freopen sullo standard output potrebbe cambiare il modo, anche se penso che formalmente, questo è vietato in C. (È implementazione definita in C.) E a quanto pare, doesnt funziona sul vostro implementazione. Youre soluzione migliore è quello di scoprire come i vostri nomi di sistema del dispositivo di console (devtty sotto Unix CONS. Credo che, in Windows), aprirlo nella modalità desiderata, e l'uscita ad esso. risposta 16 Apr 14 at 11: 34freopen (3) - pagina man Linux fopen, fdopen, freopen - streaming funzioni aperte Test delle funzioni e requisiti delle macro per glibc (vedere featuretestmacros (7)): fdopen (): POSIXCSOURCE gt 1 XOPENSOURCE POSIXSOURCE Descrizione La fopen () funzione apre il file il cui nome è la stringa puntata da percorso e associa un flusso con esso. I punti di modalità argomento di una stringa che inizia con una delle seguenti sequenze (eventualmente seguiti da caratteri aggiuntivi, come descritto di seguito): r file di testo aperto per la lettura. Il flusso è posizionato all'inizio del file. Aperto per la lettura e la scrittura. Il flusso è posizionato all'inizio del file. Tronca il file alla lunghezza zero o creare file di testo per la scrittura. Il flusso è posizionato all'inizio del file. Aperto per la lettura e la scrittura. Il file viene creato se non esiste, altrimenti viene troncato. Il flusso è posizionato all'inizio del file. Aperto per aggiungendo (scrittura alla fine del file). Il file viene creato se non esiste. Il flusso è posizionato alla fine del file. Aperto per la lettura e aggiungendo (scrittura alla fine del file). Il file viene creato se non esiste. La posizione di file iniziale per la lettura si trova all'inizio del file, ma la produzione è sempre aggiunto alla fine del file. La stringa modalità può anche includere la lettera b sia come ultimo carattere o come un carattere tra i caratteri in una delle stringhe di due caratteri sopra descritti. Questo è strettamente per la compatibilità con C89 e non ha alcun effetto il B viene ignorata su tutti i sistemi POSIX conformi, tra cui Linux. (Altri sistemi possono trattare i file di testo e file binari in modo diverso, e aggiungendo la B può essere una buona idea se si fa IO di un file binario e si aspettano che il programma può essere portato su ambienti non-Unix.) Vedi NOTE sotto per i dettagli estensioni glibc per la modalità. Tutti i file creati avranno modo SIRUSR SIWUSR SIRGRP SIWGRP SIROTH SIWOTH (0666), come modificato dal valore di processs umask (vedi umask (2)). Legge e scrive possono essere mescolati sui flussi readwrite in qualsiasi ordine. Si noti che ANSI C richiede che una funzione di posizionamento file di intervenire tra l'uscita e l'ingresso, a meno che una operazione di ingresso incontra end-of-file. (Se questa condizione non è soddisfatta, quindi una lettura è permesso di restituire il risultato di scritture diverse da quelle più recenti.) Quindi è buona prassi (e in effetti a volte necessario sotto Linux) per porre fseek (3) o fgetpos (3 ) la cooperazione tra scrivere e leggere le operazioni su tale flusso. Questa operazione può essere un apparente no-op (come in fseek (. 0L, SEEKCUR) chiamato per il suo effetto collaterale di sincronizzazione. L'apertura di un file in modalità append (una come primo carattere di modalità) fa sì che tutte le operazioni di scrittura successive a questo flusso di verificarsi alla fine del file, come se preceduto la chiamata. il fdopen () funzione associa un flusso con il descrittore file esistente, fd la modalità del flusso (uno dei valori r, r, w, w, a, a) devono essere compatibili con la modalità del descrittore di file. l'indicatore di posizione del file del nuovo flusso è impostato per che l'appartenenza a fd. e l'errore e la fine del file indicatori vengono cancellati. modalità w o w non causano troncamento del file. il descrittore di file non viene ingannato, e verrà chiusa quando il flusso creato da fdopen () è chiuso. il risultato dell'applicazione fdopen () per un oggetto di memoria condivisa non è definita. la funzione freopen () si apre il file di cui nome è la stringa puntata da percorso e associa il flusso puntato da flusso con esso. il flusso originale (se esiste) è chiusa. L'argomento modo è usato solo come nella funzione fopen (). L'uso primario della funzione freopen () è quello di modificare il file associato a un flusso di testo standard (stderr. Stdin. O stdout). Valore di ritorno Al successo fopen completamento (), fdopen () e freopen () restituire un puntatore FILE. In caso contrario, viene restituito NULL e errno viene impostato per indicare l'errore. La modalità fornito a fopen (), fdopen (), o freopen () non è valido. Le funzioni freopen () fopen (), fdopen () e possono anche fallire e impostare errno per qualsiasi degli errori specificati per il malloc di routine (3). La funzione fopen () può anche fallire e impostare errno per qualsiasi degli errori specificati per l'apertura di routine (2). La funzione fdopen () può anche fallire e impostare errno per qualsiasi degli errori specificati per il fcntl di routine (2). La funzione freopen () può anche fallire e impostare errno per qualsiasi degli errori specificati per le routine aperte (2), fclose (3) e fflush (3). Conformi alla fopen () e le funzioni freopen () conformarsi alle C89. La funzione fdopen () è conforme a POSIX.1-1990. Glibc Note La libreria GNU C consente le seguenti estensioni per la stringa specificata in modalità. C (da glibc 2.3.3) Non fare l'operazione di apertura, o successive operazioni di lettura e scrittura, i punti di cancellazione thread. Questo flag viene ignorato per fdopen (). e (dal glibc 2.7) Aprire il file con il flag OCLOEXEC. Vedere aperto (2) per ulteriori informazioni. Questo flag viene ignorato per fdopen (). m (dal glibc 2.3) tenta di accedere al file utilizzando mmap (2), piuttosto che le chiamate di sistema IO (lettura (2), scrivere (2)). Attualmente, l'uso di mmap (2) viene eseguita solo per un file aperto in lettura. x Aprire il file esclusivamente (come la bandiera OEXCL di apertura (2)). Se il file esiste già, fopen () non riesce, e imposta errno a EEXIST. Questo flag viene ignorato per fdopen (). Oltre ai caratteri di cui sopra, fopen () e freopen () supporta la seguente sintassi in modalità. La data stringa viene preso come nome di un insieme di caratteri codificati e il flusso è contrassegnato come larghezza orientate. Da allora in poi, le funzioni di conversione interne convertono IO da e per la stringa di set di caratteri. Se la sintassi stringa di CCS non è specificato, allora il livello di orientamento del flusso è determinata dalla prima operazione di file. Se questa operazione è un'operazione a livello di carattere, il flusso è contrassegnato larga-oriented, e funzioni per convertire il set di caratteri codificati vengono caricati. Durante l'analisi per singoli caratteri bandiera in modalità (cioè i caratteri che precedono la specifica CCS), la realizzazione glibc di fopen () e freopen () limita il numero di caratteri esaminati in modalità a 7 (o, nelle versioni glibc prima 2.14, a 6 , che non è stato sufficiente a includere eventuali specifiche quali rbcmxe). L'implementazione corrente di fdopen () analizza al massimo 5 caratteri in modalità. flusso ByReopen riferimento con file o una modalità diversa Riutilizza flusso di aprire il file specificato da nome del file o per cambiare la sua modalità di accesso. Se viene specificato un nuovo nome, la funzione tenta prima di chiudere tutti i file già associato a flusso (terzo parametro) e dissocia esso. Quindi, indipendentemente dal fatto che tale flusso è stato con successo chiuso o no, freopen apre il file specificato da filename e lo associa con il flusso proprio come fopen farebbe utilizzando la modalità specificata. Se il nome del file è un puntatore nullo, la funzione tenta di cambiare la modalità del flusso. Anche se una particolare implementazione biblioteca è permesso di limitare le modifiche consentite, e in quali circostanze. L'indicatore di errore e l'indicatore EOF vengono automaticamente cancellati (come se clearerr è stato chiamato). Questa funzione è particolarmente utile per reindirizzare i flussi predefiniti come stdin. stdout e stderr di file specifici (si veda l'esempio qui sotto). Parametri nome stringa di C che contiene il nome del file da aprire. Il suo valore deve seguire le specifiche nome del file del ambiente funzionante, e può includere un percorso (se supportato dal sistema). Se il parametro è un puntatore nullo, la funzione tenta di cambiare la modalità del flusso. come se il nome del file attualmente associato a tale flusso era stato usato. modalità stringa di C che contiene una modalità di accesso ai file. Può essere: leggere: file aperti per le operazioni di input. Il file deve esistere. scrivere: Creare un file vuoto per le operazioni in uscita. Se un file con lo stesso nome esiste già, i suoi contenuti vengono scartate e il file viene trattato come un nuovo file vuoto. aggiungere: Aprire il file per l'uscita alla fine di un file. operazioni di uscita sempre scrivere dati alla fine del file, espandendolo. le operazioni di riposizionamento (fseek. fsetpos. riavvolgimento) vengono ignorati. Il file viene creato se non esiste. readupdate: Aprire un file per l'aggiornamento (sia per l'ingresso e l'uscita). Il file deve esistere. writeupdate: Creare un file vuoto e aprirlo per l'aggiornamento (sia per l'ingresso e l'uscita). Se un file con lo stesso nome esiste già il suo contenuto vengono scartate e il file viene trattato come un nuovo file vuoto. appendupdate: Aprire un file per aggiornamento (sia per l'input e l'output) con tutte le operazioni di output scrittura di dati alla fine del file. le operazioni di riposizionamento (fseek. fsetpos. riavvolgimento) colpisce le operazioni di input successivi, ma le operazioni di uscita spostare la posizione di nuovo alla fine del file. Il file viene creato se non esiste. Con i progettisti di modo sopra il file è aperto come file di testo. Per aprire un file come un file binario. un carattere b deve essere incluso nella stringa modalità. Questo carattere aggiuntivo b può essere sia aggiunta alla fine della stringa (rendendo così le seguenti modalità composti: RB, WB, ab, RB, WB, ab) o essere inseriti tra la lettera e il segno per le modalità mista (RB, wb, ab). Il nuovo standard C (C2011, che non fa parte di C) aggiunge un nuovo subspecifier standard (x), che può essere aggiunto a qualsiasi specificatore w (per formare WX. WBX. Wx o wbxwbx). Questo subspecifier costringe la funzione di fallire se il file esiste, invece di sovrascriverlo. Se i caratteri aggiuntivi seguono la sequenza, il comportamento dipende l'attuazione libreria: alcune implementazioni possono ignorare i caratteri aggiuntivi in modo che, per esempio un t aggiuntivo (a volte usato per indicare in modo esplicito un file di testo) è accettato. Su alcune implementazioni biblioteca, l'apertura o la creazione di un file di testo con modalità di aggiornamento può trattare il flusso invece come un file binario. puntatore flusso di un oggetto file che identifica il flusso di essere riaperto. Valore restituito Se il file viene riaperto con successo, la funzione restituisce il puntatore passato come parametro flusso. che può essere utilizzato per identificare il flusso riaperto. In caso contrario, un puntatore nullo viene restituito. Sulla maggior parte delle implementazioni di libreria, la variabile errno viene anche impostato su un codice di errore specifico sistema failure. Opens il file il cui nome è specificato nel parametro filename e lo associa con un flusso che può essere identificato in operazioni future dal puntatore file restituito . Le operazioni che sono ammessi sul torrente e come queste vengono eseguite sono definiti dal parametro mode. Il flusso restituito è fully-buffered per impostazione predefinita se è noto che si riferisce a un dispositivo interattivo (vedi setbuf). Il puntatore restituito può essere dissociato dal file chiamando fclose o freopen. Tutti i file aperti vengono chiusi automaticamente al termine normale programma. L'ambiente di esecuzione supporta almeno file FOPENMAX aperte contemporaneamente. Parametri nome stringa di C che contiene il nome del file da aprire. Il suo valore deve seguire le specifiche nome del file del ambiente funzionante, e può includere un percorso (se supportato dal sistema). modalità stringa di C che contiene una modalità di accesso ai file. Può essere: leggere: file aperti per le operazioni di input. Il file deve esistere. scrivere: Creare un file vuoto per le operazioni in uscita. Se un file con lo stesso nome esiste già, i suoi contenuti vengono scartate e il file viene trattato come un nuovo file vuoto. aggiungere: Aprire il file per l'uscita alla fine di un file. operazioni di uscita sempre scrivere dati alla fine del file, espandendolo. le operazioni di riposizionamento (fseek. fsetpos. riavvolgimento) vengono ignorati. Il file viene creato se non esiste. readupdate: Aprire un file per l'aggiornamento (sia per l'ingresso e l'uscita). Il file deve esistere. writeupdate: Creare un file vuoto e aprirlo per l'aggiornamento (sia per l'ingresso e l'uscita). Se un file con lo stesso nome esiste già il suo contenuto vengono scartate e il file viene trattato come un nuovo file vuoto. appendupdate: Aprire un file per aggiornamento (sia per l'input e l'output) con tutte le operazioni di output scrittura di dati alla fine del file. le operazioni di riposizionamento (fseek. fsetpos. riavvolgimento) colpisce le operazioni di input successivi, ma le operazioni di uscita spostare la posizione di nuovo alla fine del file. Il file viene creato se non esiste. Con i progettisti di modo sopra il file è aperto come file di testo. Per aprire un file come un file binario. un carattere b deve essere incluso nella stringa modalità. Questo carattere aggiuntivo b può essere sia aggiunta alla fine della stringa (rendendo così le seguenti modalità composti: RB, WB, ab, RB, WB, ab) o essere inseriti tra la lettera e il segno per le modalità mista (RB, wb, ab). Il nuovo standard C (C2011, che non fa parte di C) aggiunge un nuovo subspecifier standard (x), che può essere aggiunto a qualsiasi specificatore w (per formare WX. WBX. Wx o wbxwbx). Questo subspecifier costringe la funzione di fallire se il file esiste, invece di sovrascriverlo. Se i caratteri aggiuntivi seguono la sequenza, il comportamento dipende l'attuazione libreria: alcune implementazioni possono ignorare i caratteri aggiuntivi in modo che, per esempio un t aggiuntivo (a volte usato per indicare in modo esplicito un file di testo) è accettato. Su alcune implementazioni biblioteca, l'apertura o la creazione di un file di testo con modalità di aggiornamento può trattare il flusso invece come un file binario. I file di testo sono file che contengono sequenze di linee di testo. A seconda dell'ambiente in cui l'applicazione viene eseguita, un po 'di conversione dei caratteri speciali può verificarsi nelle operazioni InputOutput in modalità testo per adattarli a un formato di file di testo specifico del sistema. Anche se in alcuni ambienti non si verificano conversioni ed entrambi i file di testo e file binari sono trattati allo stesso modo, utilizzando la modalità appropriata migliora la portabilità. Per i file aperti per l'aggiornamento (quelle che includono un segno), sul quale sono ammessi operazioni sia di input e output, il flusso deve essere lavata (fflush) o riposizionato (fseek. Fsetpos. Riavvolgimento) prima di una operazione di lettura che segue un'operazione di scrittura. Il flusso deve essere riposizionato (fseek. Fsetpos. Riavvolgimento) prima di una operazione di scrittura che segue un'operazione di lettura (ogni volta che l'operazione non ha raggiunto la fine del file). Valore restituito Se il file viene aperto con successo, la funzione restituisce un puntatore ad un oggetto di file che può essere utilizzato per identificare il flusso sulle operazioni future. In caso contrario, un puntatore nullo viene restituito. Sulla maggior parte delle implementazioni di libreria, la variabile errno viene anche impostato su un codice di errore specifico del sistema in caso di fallimento.
Comments
Post a Comment