Я переношу исходный код, чтобы открыть/прочитать/записать файл, совместно используемый несколькими процессами. Он хорошо работает под окнами и, как это было в основном с использованием подталкивания :: межпроцессного (1.44) Я не ожидал слишком много вопроса, но я нашел что-то странное:Под Linux boost :: interprocess :: create_or_open_file изменить тип файла
//pseudo code
namespace bip = boost::interprocess;
namespace bipd = boost::interprocess::detail;
loop
bip::file_handle_t pFile = bipd::create_or_open_file(filename, bip::read_write);
bipd::acquire_file_lock(pFile);
// try to read bytes from pFile with 'read'
bipd::truncate_file(pFile, 0);
bipd::write_file(pFile, (const void*)(textBuffer)), bufLen);
Когда код запускается в первый раз это создать файл и написать текст. Режим файла - ASCII (ASCII text, with very long lines
), и я могу прочитать текст. Но когда цикл выполняется во второй раз, тип файла изменяется на data
, а textBuffer
находится в файле, но как двоичные данные!
Я осмотрел boost/interprocess/details/os_file_functions.hpp
, но я не нашел причины для такого поведения.
У вас есть идея?