Невозможно передать с помощью __gnu_cxx :: stdio_filebuf

Это создает файл, но ничего не пишет.

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

Я знаю, что есть и другие простые решения для получения результата, но мне нужно использовать этот нестандартный filebuf для блокировки файла во время редактирования, чтобы другой процесс не смог открыть файл.
Я не знаю, почему это не работает.

3

Решение

std::ostream уже есть конструктор, делающий правильные вещи:

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

Помни что stdio_filebuf не закроет FILE* когда он разрушен, поэтому не забудьте сделать это самостоятельно, если вам это нужно.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]