std::fopen(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

🌸 NAME 🌸

std::fopen β€” std::fopen, periodt. This is the std::fopen(3) page from the C++ Standard Libary, and bestie, it's literally all about opening files and handing you back a file stream. ✨

πŸ“œ Synopsis πŸ“œ

Defined in header <cstdio>:

std::FILE* fopen( const char* filename, const char* mode );

Opens a file indicated by filename and returns a file stream associated with that file. mode is used to determine the file access mode. 🫢

πŸŽ€ Parameters πŸŽ€

  • filename β€” file name to associate the file stream to πŸ“
  • mode β€” null-terminated character string determining file access mode πŸ’…

πŸ—‚οΈ File access flags πŸ—‚οΈ

Here's the full file-access flag table, bestie β€” no skips, no cap:

  • "r" β€” Meaning: read. Explanation: Open a file for reading. Action if file already exists: read from start. Action if file does not exist: return NULL and set error. 😭
  • "w" β€” Meaning: write. Explanation: Create a file for writing. Action if file already exists: destroy contents. Action if file does not exist: create new. πŸ”₯
  • "a" β€” Meaning: append. Explanation: Append to a file. Action if file already exists: write to end. Action if file does not exist: create new. πŸ’«
  • "r+" β€” Meaning: read extended. Explanation: Open a file for read/write. Action if file already exists: read from start. Action if file does not exist: return NULL and set error. 😭
  • "w+" β€” Meaning: write extended. Explanation: Create a file for read/write. Action if file already exists: destroy contents. Action if file does not exist: create new. πŸ”₯
  • "a+" β€” Meaning: append extended. Explanation: Open a file for read/write. Action if file already exists: write to end. Action if file does not exist: create new. πŸ’«

File access mode flag "b" can optionally be specified to open a file in binary mode. This flag has no effect on POSIX systems, but on Windows, for example, it disables special handling of '\n' and '\x1A'. πŸ‘€

On the append file access modes, data is written to the end of the file regardless of the current position of the file position indicator. πŸŒ€

File access mode flag "x" can optionally be appended to "w" or "w+" specifiers. This flag forces the function to fail if the file exists, instead of overwriting it. (C++17) ✨

Warning, bestie: The behavior is undefined if the mode is not one of the strings listed above. Some implementations define additional supported modes (e.g. Windows). πŸ’€

πŸ’– Return value πŸ’–

If successful, returns a pointer to the object that controls the opened file stream, with both eof and error bits cleared. The stream is fully buffered unless filename refers to an interactive device. 🌈

On error, returns a null pointer. POSIX requires that errno is set in this case. 🫢

🧠 Notes 🧠

The format of filename is implementation-defined, and does not necessarily refer to a file (e.g. it may be the console or another device accessible through filesystem API). On platforms that support them, filename may include absolute or relative filesystem path. 🌸

For portable directory and file naming, see C++ filesystem library or boost.filesystem. πŸ“

✨ Example ✨

// Run this code

#include <cstdio>
#include <cstdlib>

int main()
{
    int is_ok = EXIT_FAILURE;
    FILE* fp = std::fopen("/tmp/test.txt", "w+");
    if (!fp)
    {
        std::perror("File opening failed");
        return is_ok;
    }

    int c; // Note: int, not char, required to handle EOF
    while ((c = std::fgetc(fp)) != EOF) // Standard C I/O file reading loop
        std::putchar(c);

    if (std::ferror(fp))
        std::puts("I/O error when reading");
    else if (std::feof(fp))
    {
        std::puts("End of file reached successfully");
        is_ok = EXIT_SUCCESS;
    }

    std::fclose(fp);
    return is_ok;
}

Output:

End of file reached successfully

πŸ‘€ See also πŸ‘€

  • fclose β€” closes a file (function) πŸ’…
  • fflush β€” synchronizes an output stream with the actual file (function) ✨
  • freopen β€” open an existing stream with a different name (function) πŸ¦‹
  • C documentation for fopen β€” the C docs, iykyk πŸ“š

Source/version/date vibe check: http://cppreference.com, 2024.06.10, and yup, this iconic page is std::fopen(3). Bye bestie, go open some files responsibly πŸ’–πŸŽ€

πŸ“¦ where this page comes from