_setmode

Ustawia tryb tłumaczenia plików.

Składnia

int _setmode (
   int fd,
   int mode
);

Parametry

fd
Deskryptor plików.

mode
Nowy tryb tłumaczenia.

Wartość zwracana

W przypadku powodzenia zwraca poprzedni tryb tłumaczenia.

Jeśli do tej funkcji są przekazywane nieprawidłowe parametry, wywoływana jest procedura obsługi nieprawidłowych parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonanie może kontynuować, ta funkcja zwraca wartość -1 i ustawia errno wartość EBADF, która wskazuje nieprawidłowy deskryptor plików lub EINVAL, co wskazuje nieprawidłowy mode argument.

Aby uzyskać więcej informacji na temat tych i innych kodów powrotnych, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

Uwagi

Funkcja _setmode ustawia mode tryb tłumaczenia pliku podanego przez fd. Przekazywanie _O_TEXT jako mode zestawów tekstu (czyli przetłumaczonego) trybu. Kombinacje zestawienia powrotu karetki (CR-LF) są tłumaczone na pojedynczy znak kanału informacyjnego linii na wejściu. Znaki kanału informacyjnego wiersza są tłumaczone na kombinacje CR-LF w danych wyjściowych. Przekazywanie _O_BINARY zestawów trybu binarnego (nieprzetłumaczonego), w którym te tłumaczenia są pomijane.

Możesz również przekazać _O_U16TEXT_O_U8TEXTtryb , lub _O_WTEXT , aby włączyć tryb Unicode, jak pokazano w drugim przykładzie w dalszej części tego dokumentu.

Uwaga

Tryb Unicode jest przeznaczony dla szerokich funkcji drukowania (na przykład wprintf) i nie jest obsługiwany w przypadku funkcji wąskiego drukowania. Użycie funkcji wąskiego drukowania w strumieniu trybu Unicode wyzwala asercję.

_setmode Jest zwykle używany do modyfikowania domyślnego stdin trybu tłumaczenia i stdout, ale można go używać w dowolnym pliku. Jeśli zastosujesz _setmode się do deskryptora plików dla strumienia, przed _setmode wykonaniem jakichkolwiek operacji wejściowych lub wyjściowych w strumieniu.

Uwaga

Jeśli zapisujesz dane w strumieniu plików, jawnie opróżnij kod przy użyciu fflush polecenia przed zmianą _setmode trybu. Jeśli kod nie zostanie opróżniany, może wystąpić nieoczekiwane zachowanie. Jeśli nie zapisano danych w strumieniu, nie musisz opróżniać kodu.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Wymagania

Procedura Wymagany nagłówek Opcjonalne nagłówki
_setmode <io.h> <fcntl.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład: użyj polecenia _setmode , aby zmienić 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

Przykład: użyj polecenia _setmode , aby zmienić 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;
}

Zobacz też

Obsługa plików
_creat, _wcreat
fopen, _wfopen
_open, _wopen
_set_fmode