Namespaces
Variants

std:: fwide

From cppreference.net
< cpp ‎ | io ‎ | c
Definiert in Header <cwchar>
int fwide ( std:: FILE * stream, int mode ) ;

Wenn mode > 0 , wird versucht, den stream breitorientiert zu machen. Wenn mode < 0 , wird versucht, den stream byteorientiert zu machen. Wenn mode == 0 , wird nur die aktuelle Ausrichtung des Streams abgefragt.

Wenn die Ausrichtung des Streams bereits festgelegt wurde (durch Ausgabevorgänge oder durch einen früheren Aufruf von fwide), führt diese Funktion keine Aktion aus.

Inhaltsverzeichnis

Parameter

stream - Zeiger auf den C-I/O-Stream, der geändert oder abgefragt werden soll
mode - Ganzzahlwert größer als Null, um den Stream breit zu setzen, kleiner als Null, um den Stream schmal zu setzen, oder Null, um nur abzufragen

Rückgabewert

Eine ganze Zahl größer als null, wenn der Stream nach diesem Aufruf breitorientiert ist, kleiner als null, wenn der Stream nach diesem Aufruf byteorientiert ist, und null, wenn der Stream keine Orientierung hat.

Beispiel

Der folgende Code setzt und setzt die Stream-Orientierung zurück.

#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);
}

Mögliche Ausgabe:

1) Ein neu geöffneter Stream hat keine Orientierung.
        keine Orientierung
2) Byte-Orientierung einrichten.
        narrow orientation
        narrow character read '#'
        wide character read failed
3) Nur freopen() kann die Stream-Orientierung zurücksetzen.
4) Ein erneut geöffneter Stream hat keine Orientierung.
        keine Orientierung
5) Wide-Orientierung einrichten.
        wide orientation
        narrow character read failed
        wide character read '#'

Siehe auch

öffnet eine Datei
(Funktion)