_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_errlist
i _sys_nerr
.
Uwagi
Funkcja _setmode
ustawia mode
tryb tłumaczenia pliku podanego przez fd
. Przekazywanie _O_TEXT
jako mode
ustawia tryb tekstOWY ANSI (czyli przetłumaczony). 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_U8TEXT
tryb , 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