Not able to ofstream using __gnu_cxx::stdio_filebuf

2.4k Views Asked by At

This creates the file but it doesn't write anything.

std::ofstream outstream;
FILE * outfile;

outfile = fopen("/usr7/cs/test_file.txt", "w");

__gnu_cxx::stdio_filebuf<char> filebuf(outfile, std::ios::out);
outstream.std::ios::rdbuf(&filebuf);

outstream << "some data";
outstream.close();
fclose(outfile);

I know there are other easy solutions to achieve the output, but i need to use this non-standard filebuf to lock a file while editing, so that other process can't open the file. I don't know why this is not working.

1

There are 1 best solutions below

2
Benno On

std::ostream already has a constructor doing the right thing:

#include <ext/stdio_filebuf.h>
#include <iostream>
#include <fcntl.h>

int main() {
    auto file = fopen("test.txt", "w");
    __gnu_cxx::stdio_filebuf<char> sourcebuf(file, std::ios::out);
    std::ostream out(&sourcebuf);
    out << "Writing to fd " << sourcebuf.fd() << std::endl;
}

Remember that stdio_filebuf won't close the FILE* when it is destroyed, so remember to do that yourself if you need it.