Я не могу воспроизвести это поведение:
Live On Coliru ¹
Это для компиляции ивыполнение с
g++ -std=c++14 -O2 -Wall -pedantic -pthread main.cpp -lboost_{system,iostreams} && ./a.out
file output.txt
xxd output.txt
Печать
output.txt: ASCII text, with CRLF line terminators
00000000: 4865 6c6c 6f20 0d0a 2057 6f72 6c64 0d0a Hello .. World..
Я предлагаю добавить явное закрытие fd
, хотя это технически не должно иметь значения.
Кроме того, есть лиЕсть ли основания использовать FILE*
в 2019 году? Я предполагаю, что вы в том числе из-за устаревшего кода, который использует его только.
¹ Листинг:
#include <boost/iostreams/device/file_descriptor.hpp>
#include <boost/iostreams/filter/newline.hpp>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/flush.hpp>
#include <cstdio>
#include <iostream>
#include <string>
int main() {
FILE* fp = std::fopen("output.txt", "w");
const int fd = fileno(fp);
boost::iostreams::file_descriptor_sink output(fd, boost::iostreams::never_close_handle);
boost::iostreams::filtering_streambuf<boost::iostreams::output> obuf;
obuf.push(boost::iostreams::newline_filter(boost::iostreams::newline::dos));
obuf.push(output);
std::ostream buffer(&obuf);
std::string myteststr = "Hello \n World\n";
buffer << myteststr;
buffer.flush();
boost::iostreams::flush(obuf);
::close(fd);
}