std::fwide
Определён в заголовочном файле <cwchar> | ||
|---|---|---|
int fwide( std::FILE* stream, int mode ); |
Если mode > 0, предпринимается попытка перевести stream в режим широкой ориентации. Если mode < 0, предпринимается попытка перевести stream в режим байтовой ориентации. Если mode == 0, возвращается только текущая ориентация потока.
Если ориентация потока уже определена (в результате выполнения операции вывода или предыдущего вызова fwide), эта функция ничего не делает.
Параметры
| stream | - | указатель на поток ввода-вывода C, ориентацию которого нужно изменить или запросить |
| mode | - | целочисленное значение больше нуля, чтобы задать потоку широкую ориентацию, меньше нуля — байтовую, или ноль — только для запроса |
Возвращаемое значение
Целое число больше нуля, если после этого вызова поток имеет широкую ориентацию, меньше нуля, если после этого вызова поток имеет байтовую ориентацию, и ноль, если ориентация потока не задана.
Пример
Следующий код задаёт и сбрасывает ориентацию потока.
#include <cstdio>
#include <cstdlib>
#include <cwchar>
#include <iostream>
void show_orientation(int n)
{
n < 0 ? std::wcout << "\tnarrow orientation\n" :
n > 0 ? std::wcout << "\twide orientation\n" :
std::wcout << "\tno orientation\n";
}
void try_read(FILE* fp)
{
if (const int c = std::fgetc(fp); c == EOF)
std::wcout << "\tnarrow character read failed\n";
else
std::wcout << "\tnarrow character read '" << static_cast<char>(c) << "'\n";
if (const wint_t wc = std::fgetwc(fp); wc == WEOF)
std::wcout << "\twide character read failed\n";
else
std::wcout << "\twide character read '" << static_cast<wchar_t>(wc) << "'\n";
}
int main()
{
enum fwide_orientation : int { narrow = -1, query, wide };
FILE* fp = std::fopen("main.cpp", "r");
if (!fp)
{
std::wcerr << "fopen() failed\n";
return EXIT_FAILURE;
}
std::wcout << "1) A newly opened stream has no orientation.\n";
show_orientation(std::fwide(fp, fwide_orientation::query));
std::wcout << "2) Establish byte orientation.\n";
show_orientation(std::fwide(fp, fwide_orientation::narrow));
try_read(fp);
std::wcout << "3) Only freopen() can reset stream orientation.\n";
if (std::freopen("main.cpp", "r", fp) == NULL)
{
std::wcerr << "freopen() failed\n";
return EXIT_FAILURE;
}
std::wcout << "4) A reopened stream has no orientation.\n";
show_orientation(std::fwide(fp, fwide_orientation::query));
std::wcout << "5) Establish wide orientation.\n";
show_orientation(std::fwide(fp, fwide_orientation::wide));
try_read(fp);
std::fclose(fp);
}
Возможный вывод:
1) A newly opened stream has no orientation.
no orientation
2) Establish byte orientation.
narrow orientation
narrow character read '#'
wide character read failed
3) Only freopen() can reset stream orientation.
4) A reopened stream has no orientation.
no orientation
5) Establish wide orientation.
wide orientation
narrow character read failed
wide character read '#'
См. также
| открывает файл (функция) |
|
Документация C для fwide |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/c/fwide