_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 EBADFauf , 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_errlistund _sys_nerr.errno

Hinweise

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. 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_U8TEXToder _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. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the 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

Dateiverarbeitung
_creat, _wcreat
fopen, _wfopen
_open, _wopen
_set_fmode