_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 errnoEBADFund legt entweder auf fest, was auf einen ungültigen Dateideskriptor hinweist, EINVALoder , 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_U16TEXToder ü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. wprintfB. ) 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