Spec-Zone.ru › C

fwide

Определено в заголовке <wchar.h>
int fwide( FILE *stream, int mode );
(с C95)

Если mode > 0, попытка сделать stream широкоориентированным. Если mode < 0, попытка сделать stream байтовоориентированным. Если mode==0, только запрос текущей ориентации потока.

Если ориентация потока уже определена (путем выполнения вывода или предыдущего вызова функции fwide), эта функция ничего не делает.

Параметры

stream - указатель на поток C I/O, который нужно изменить или запросить
mode - целое значение больше нуля для установки потока широким, меньше нуля для установки потока узким или ноль для запроса только

Возвращаемое значение

Целое число больше нуля, если поток широкоориентирован после этого вызова, меньше нуля, если поток байтовоориентирован после этого вызова, и ноль, если у потока нет ориентации.

Пример

Следующий код устанавливает и сбрасывает ориентацию потока.

#include <wchar.h>
#include <stdio.h>
#include <stdlib.h>
 
void show_orientation(int n)
{
    n < 0 ? puts("\tnarrow orientation"):
    n > 0 ? puts("\twide orientation"):
            puts("\tno orientation");
}
 
void try_read(FILE* fp)
{
    int c = fgetc(fp);
    if(c == EOF)
        puts("\tnarrow character read failed");
    else
        printf("\tnarrow character read '%c'\n", c);
 
    wint_t wc = fgetwc(fp);
    if(wc == WEOF)
        puts("\twide character read failed");
    else
        printf("\twide character read '%lc'\n", wc);
}
 
int main(void)
{
    enum fwide_orientation { narrow = -1, query, wide };
 
    FILE* fp = fopen("main.cpp", "r");
    if (!fp)
    {
        perror("fopen() failed");
        return EXIT_FAILURE;
    }
 
    puts("1) A newly opened stream has no orientation.");
    show_orientation(fwide(fp, query));
 
    puts("2) Establish byte orientation.");
    show_orientation(fwide(fp, narrow));
    try_read(fp);
 
    puts("3) Only freopen() can reset stream orientation.");
    if (freopen("main.cpp", "r", fp) == NULL)
    {
       perror("freopen() failed");
       return EXIT_FAILURE;
    }
 
    puts("4) A reopened stream has no orientation.");
    show_orientation(fwide(fp, query));
 
    puts("5) Establish wide orientation.");
    show_orientation(fwide(fp, wide));
    try_read(fp);
 
    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 '#'

Ссылки

  • Стандарт C17 (ISO/IEC 9899:2018):
    • 7.29.3.5 Функция fwide (стр. 309)
  • Стандарт C11 (ISO/IEC 9899:2011):
    • 7.29.3.5 Функция fwide (стр. 423)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 7.24.3.5 Функция fwide (стр. 369)

См. также

fopenfopen_s
(C11)
открывает файл
(функция)
Документация C++ для fwide

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/io/fwide

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API