user3375257
user3375257

Reputation: 77

Not able to ofstream using __gnu_cxx::stdio_filebuf

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.

Upvotes: 4

Views: 2719

Answers (1)

Benno
Benno

Reputation: 5466

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.

Upvotes: 2

Related Questions