_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 ungültige Parameter an die Funktion übergeben werden, wird der Handler für ungültige Parameter aufgerufen, wie in Parameter Validation (Parameterüberprüfung)beschrieben. Wenn die weitere Ausführung zugelassen wird, gibt diese Funktion -1 zurück errno
EBADF
und legt entweder auf fest, was auf einen ungültigen Dateideskriptor hinweist, EINVAL
oder , was auf ein ungültiges Argument mode
hinweist.
Weitere Informationen zu diesen und anderen Rückgabecodes finden Sie unter _doserrno
, errno
_sys_errlist
, und _sys_nerr
.
Bemerkungen
Die Funktion _setmode
setzt den Übersetzungsmodus der von mode
bereitgestellten Datei auf fd
. Durch die Übergabe von _O_TEXT
als mode
wird der Modus für den übersetzten Text festgelegt. Cr-LF-Kombinationen (Wagenrücklaufzeilenfeed) werden bei der Eingabe in ein einzelnes Zeilenfeedzeichen ü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 , _O_U16TEXT
oder übergeben _O_U8TEXT
, _O_WTEXT
um den Unicode-Modus zu aktivieren, wie im zweiten Beispiel weiter später in diesem Dokument gezeigt.
Achtung
Der Unicode-Modus ist für Breitdruckfunktionen (z. wprintf
B. ) und wird für schmale Druckfunktionen nicht unterstützt. Die Verwendung einer schmalen Druckfunktion in einem Stream im Unicode-Modus löst eine Assert-Funktion 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 Dateistream schreiben, leeren fflush
_setmode
Sie den Code explizit mit , bevor Sie zum Ändern des Modus verwenden. 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 dies ändern, erfahren Sie unter Globaler Status in der CRT.
Anforderungen
-Routine zurückgegebener Wert | Erforderlicher Header | Optionale Header |
---|---|---|
_setmode |
<io.h> |
<fcntl.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Compatibility.
Beispiel: Verwenden Sie , _setmode
um stdin zu ändern.
// 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 Sie , _setmode
um stdout zu ändern.
// 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
Dateiverarbeitung
_creat
, _wcreat
fopen
, _wfopen
_open
, _wopen
_set_fmode