std::fwide
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <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 << L"\tузкая ориентация\n" :
n > 0 ? std::wcout << L"\tширокая ориентация\n" :
std::wcout << L"\tнет ориентации\n";
}
void try_read(FILE* fp)
{
if (const int c = std::fgetc(fp); c == EOF)
std::wcout << L"\tчтение узкого символа не удалось\n";
else
std::wcout << L"\tчтение узкого символа '" << static_cast<char>(c) << "'\n";
if (const wint_t wc = std::fgetwc(fp); wc == WEOF)
std::wcout << L"\tчтение широкого символа не удалось\n";
else
std::wcout << L"\tчтение широкого символа '" << static_cast<wchar_t>(wc) << "'\n";
}
int main()
{
enum fwide_orientation : int { narrow = -1, query, wide };
std::setlocale(LC_ALL, "en_US.utf8");
FILE* fp = std::fopen("main.cpp", "r");
if (!fp)
{
std::wcerr << L"fopen() не удалась\n";
return EXIT_FAILURE;
}
std::wcout << L"1) Вновь открытый поток не имеет ориентации.\n";
show_orientation(std::fwide(fp, fwide_orientation::query));
std::wcout << L"2) Устанавливает байтовую ориентацию.\n";
show_orientation(std::fwide(fp, fwide_orientation::narrow));
try_read(fp);
std::wcout << L"3) Только freopen() может сбросить ориентацию потока.\n";
if (std::freopen("main.cpp", "r", fp) == NULL)
{
std::wcerr << L"freopen() не удалась\n";
return EXIT_FAILURE;
}
std::wcout << L"4) Вновь открытый поток не имеет ориентации.\n";
show_orientation(std::fwide(fp, fwide_orientation::query));
std::wcout << L"5) Устанавливает широкую ориентацию.\n";
show_orientation(std::fwide(fp, fwide_orientation::wide));
try_read(fp);
std::fclose(fp);
}
Возможный вывод:
1) Вновь открытый поток не имеет ориентации.
нет ориентации
2) Устанавливает байтовую ориентацию.
узкая ориентация
чтение узкого символа '#'
чтение широкого символа не удалось
3) Только freopen() может сбросить ориентацию потока.
4) Вновь открытый поток не имеет ориентации.
нет ориентации
5) Устанавливает широкую ориентацию.
широкая ориентация
чтение узкого символа не удалось
чтение широкого символа '#'
Смотрите также
открывает файл Оригинал: opens a file Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) | |
Документация C по fwide
| |