Моя программа на C++ вызывает другую программу через system()
. Эта программа записывает файл. Я не могу изменить вызываемую программу.Файл, читаемый после вызова системы()
Моя программа тогда должна быть прочитана в файле, который был написан. В настоящее время моя программа читает в файле так быстро, что изменения другой программы еще не попали в файловую систему, и моя программа читается в устаревшей версии.
Как заставить вызванную программу закончить запись до того, как моя программа попытается прочитать? Или, может быть, может ли вызывающая программа проверить, что файл закончен?
Я переключился на system()
с fork/execv
и CreateProcess специально, чтобы программа блокировалась, и мне не пришлось бы следить за прекращением. Поэтому я мог бы вернуться, если это поможет.
Прямо сейчас, моей единственной идеей было бы удалить файл перед вызовом system()
- таким образом, он не существовал бы, если письмо не было завершено.
Любое решение должно иметь версии для Mac, Windows и Linux.
Не используйте 'system()'. Это зло. – Qix
Ваша система() вызывает вашу программу напрямую? Выполняет ли программа свою задачу в одном и том же процессе (против порождения отрывного процесса и т. Д.)? system() блокирует до выхода подпроцесса; любые сделанные им обновления файлов должны быть видны родителям. – seand
Мой вызов system() вызывает программу напрямую - программа ничего не делает. Просто один процесс, который пишет простой текстовый файл и выходит. Я согласен, что любые изменения должны быть видны - вот почему я использовал system() - но это не сработало. Если я подожду короткое время и откройте его, я получу желаемое поведение. – user52485