2015-11-04 5 views
1

Есть ли библиотека с функцией, которая блокирует вызывающего абонента до тех пор, пока определенный файл не будет существовать и/или не будет удален? (Очень желательно в стандартных библиотеках C++ или подталкивание.)Как подождать, пока файл будет существовать (и будет выпущен)?

фон

Я C++ новичок писать однопоточный приложение, которое должно

  1. Выполнение некоторых тяжелых вычислений на запуске.
  2. Подождите, пока не будет определен определенный входной файл (и будет удален).
  3. Если файл содержит определенную инструкцию, удалите его и выйдите.
  4. (Else) обрабатывает его, удаляет и создает выходной файл.
  5. Повторите с шага 2.

Причина, по которой шаги 2,3 и 5 (вместо того, чтобы просто шаг 1 & 4 и вызова приложения по требованию) является то, что шаг 1 включает в себя некоторую тяжелую обработку.

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

Каков правильный подход? (Предпочтительно межплатформенная: Windows, Linux, OSX.)

+1

Только ради этого: http://stackoverflow.com/questions/10164341/cross-platform-c-filesystem-watcher - не повышать или стандарт librar y (который еще ничего не имеет в файловых системах), но может оказаться полезным. – Rostislav

+0

Re * Подождите, пока не будет определен определенный входной файл (и его можно удалить). * Первая часть проста. Попробуйте открыть файл. Подождите немного и повторите попытку, если вы получите сообщение об ошибке. В скобках нет ничего, кроме легкого. Что это значит, особенно в межплатформенном смысле? –

ответ

2

Существует служба Asio, что абстрагирует над

  • Win32 API filemonitoring
  • inotify на Linux (и друзья?)

плавающие вокруг в Интернете. Он не был принят в Boost, тем не менее, несмотря на некоторое обсуждение продолжается, чтобы включить его с Boost, Asio (библиотека для асинхронного ввода-вывода)

Обнаружили это, что может помочь вам найти:

1

Это, безусловно, конкретная операционная система (и файловая система). В Linux вы могли бы использовать inotify(7) (с родным Linux локальными файловыми системами, такими как Ext4 или BTRFS).

+0

Спасибо. Я надеялся, что есть библиотека, которая абстрактно описывает OS-и FS-специфику для меня. Я отредактировал вопрос соответствующим образом. – Museful

+0

Почему вы предполагаете, что каждая функция ОС может быть обернута нейтральным способом OS & FS? –

+1

Я просто надеялся, что * этот * можно использовать для трех заданных платформ (при условии, что «OS & FS neutral» означает API OS & FS, - исправьте меня, если я неправильно понял.) – Museful

Смежные вопросы