Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Задает режим преобразования файлов.
Синтаксис
int _setmode (
int fd,
int mode
);
Параметры
fd
Дескриптор файла.
mode
Новый режим преобразования.
Возвращаемое значение
При успешном выполнении возвращает предыдущий режим преобразования.
Если в эту функцию передаются недопустимые параметры, вызывается обработчик недопустимых параметров, как описано в разделе проверки параметров. Если выполнение разрешено продолжать, эта функция возвращает значение -1 и задает errno значение EBADF, указывающее недопустимый дескриптор файла или EINVALуказывающий недопустимый mode аргумент.
Дополнительные сведения об этих и других кодах возврата см. в разделе errno, _doserrnoи _sys_nerr_sys_errlist.
Замечания
Функция _setmode задает в качестве параметра mode режим преобразования файла, заданный fd. Передача _O_TEXT в виде mode набора текста ANSI (то есть переведенного) режима. Сочетания канала возврата каретки (CR-LF) превратятся в один символ канала строки для входных данных. Символы перевода строки преобразуются в комбинацию CR-LF в выводе. Передача _O_BINARY задает двоичный режим (без преобразования), в котором такие преобразования подавляются.
Вы также можете передать _O_U16TEXT_O_U8TEXTили _O_WTEXT включить режим Юникода, как показано во втором примере далее в этом документе.
Внимание
Режим Юникода предназначен для широких функций печати (например, wprintf) и не поддерживается для узких функций печати. Использование узкой функции печати в потоке в режиме Юникода активирует утверждение.
_setmode, как правило, используется для изменения режима преобразования stdin и stdout по умолчанию, однако ее можно использовать для любого файла. Если вы применяете функцию _setmode к дескриптору файла для потока, ее необходимо вызывать _setmode до выполнения любых операций ввода или вывода в потоке.
Внимание
Если данные записываются в поток файлов, то перед изменением _setmode режима явно очищается кодfflush. Если не выполнить сброс кода, может возникнуть непредвиденное поведение. Если данные не записывались в поток, выполнять сброс кода не нужно.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Требования
| Маршрут | Обязательный заголовок | Необязательные заголовки |
|---|---|---|
_setmode |
<io.h> |
<fcntl.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример. Использование _setmode для изменения 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
Пример. Изменение _setmode 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;
}
См. также
Обработка файлов
_creat, _wcreat
fopen, _wfopen
_open, _wopen
_set_fmode