Я пишу тесты для библиотеки inotify, и сейчас я работаю над захватом события IN_CREATE. Я пытаюсь использовать boost :: filesystem :: ofstream, который по существу является std :: basic_ofstream, но я не получаю событие IN_CREATE.Почему поток не запускается IN_CREATE
Есть два потока в исполнении, основной поток, и один я создаю, который обрабатывает события, как так:
std::thread thread([&]()
{
boost::asio::io_service::work(g_io_service);
g_io_service.run();
}
Всякий раз, когда событие принимается, библиотека вызывает эту функцию в контексте указанной выше теме :
[&](event_type event, std::string const & path)
{
std::lock_guard<std::mutex> lock(ready_mtx);
events.push_back(event);
condition.notify_all();
ready = true;
}
Что тест выглядит (основной поток):
{
boost::filesystem::ofstream file(path);
file << "test";
}
{
std::lock_guard<std::mutex> lock(ready_mtx);
while (!ready)
condition.wait(lock);
REQUIRE(events[0] == event_type::FILE_CREATE);
}
Я ожидаю событие для создания и изменения файла, и файл фактически создается, когда я ищу его в терминале, но я не получаю никакого события. Однако, когда я вручную создаю файл с echo "test" > test.file
, я получаю создание и изменение событий.
Есть ли причина для такого поведения? Я подхожу к этому неправильно?
Вы видите событие, когда вы закрываете поток? – Barmar
Нет, деструктор вызовов из потока близок. – pierobot
Я не могу придумать ни одного, что применимо в этом случае, но посмотрите в разделе «Предостережения» документации 'inotify': http://man7.org/linux/man-pages/man7/inotify.7.html – Barmar