_setmode
Legt den Dateiübersetzungsmodus fest.
Syntax
int _setmode (
int fd,
int mode
);
Parameter
fd
Dateideskriptor.
mode
Neuer Übersetzungsmodus.
Rückgabewert
Im Erfolgsfall wird der vorherige Übersetzungsmodus zurückgegeben.
Wenn an diese Funktion ungültige Parameter übergeben werden, wird der Handler für ungültige Parameter aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn die Ausführung fortgesetzt werden darf, gibt diese Funktion -1 zurück und legt errno
sie entweder EBADF
auf , was einen ungültigen Dateideskriptor angibt, oder EINVAL
, der ein ungültiges mode
Argument angibt.
Weitere Informationen zu diesen und anderen Rückgabecodes finden Sie unter , , _doserrno
, _sys_errlist
und _sys_nerr
.errno
Hinweise
Die Funktion _setmode
setzt den Übersetzungsmodus der von mode
bereitgestellten Datei auf fd
. Übergeben _O_TEXT
als mode
SET-ANSI-Textmodus (d. h. übersetzt). Wagenrücklauflinieneinzugskombinationen (CR-LF) werden in ein einzelnes Zeilenvorschubzeichen für die Eingabe übersetzt. Zeilenvorschubzeichen werden bei der Ausgabe in Kombinationen aus Wagenrücklauf und Zeilenvorschub (CR-LF) übersetzt. Durch die Übergabe von _O_BINARY
wird der binäre (nicht übersetzte) Modus festgelegt, in dem diese Übersetzungen unterdrückt werden.
Sie können auch den Unicode-Modus übergeben _O_U16TEXT
_O_U8TEXT
oder _O_WTEXT
aktivieren, wie im zweiten Beispiel weiter unten in diesem Dokument gezeigt.
Achtung
Der Unicode-Modus ist für breite Druckfunktionen (z wprintf
. B. ) vorgesehen und wird für schmale Druckfunktionen nicht unterstützt. Die Verwendung einer schmalen Druckfunktion in einem Unicode-Modusdatenstrom löst eine Assertion aus.
_setmode
wird normalerweise verwendet, um den Standardübersetzungsmodus von stdin
und stdout
zu ändern, aber Sie können es für jede Datei verwenden. Wenn Sie _setmode
auf den Dateideskriptor für einen Stream anwenden, rufen Sie _setmode
auf, bevor Sie Eingabe- oder Ausgabevorgänge an diesem Stream durchführen.
Achtung
Wenn Sie Daten in einen Dateidatenstrom schreiben, leeren Sie den Code explizit, fflush
bevor Sie _setmode
den Modus ändern. Wenn Sie den Code nicht leeren, kann es zu unerwartetem Verhalten kommen. Wenn Sie keine Daten in den Stream geschrieben haben, müssen Sie den Code nicht leeren.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Anforderungen
Routine | Erforderlicher Header | Optionale Header |
---|---|---|
_setmode |
<io.h> |
<fcntl.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel: Verwenden _setmode
sie zum Ändern von Stdin
// crt_setmode.c
// This program uses _setmode to change
// stdin from text mode to binary mode.
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
int main( void )
{
int result;
// Set "stdin" to have binary mode:
result = _setmode( _fileno( stdin ), _O_BINARY );
if( result == -1 )
perror( "Cannot set mode" );
else
printf( "'stdin' successfully changed to binary mode\n" );
}
'stdin' successfully changed to binary mode
Beispiel: Verwenden _setmode
zum Ändern von Stdout
// crt_setmodeunicode.c
// This program uses _setmode to change
// stdout to Unicode. Cyrillic and Ideographic
// characters will appear on the console (if
// your console font supports those character sets).
#include <fcntl.h>
#include <io.h>
#include <stdio.h>
int main(void) {
_setmode(_fileno(stdout), _O_U16TEXT);
wprintf(L"\x043a\x043e\x0448\x043a\x0430 \x65e5\x672c\x56fd\n");
return 0;
}
Siehe auch
Dateibehandlung
_creat
, _wcreat
fopen
, _wfopen
_open
, _wopen
_set_fmode