Ваше предложение открыть, отменить, контрольную сумму, закрыть не будет работать как есть, потому что вы застрянете, если контрольная сумма не совпадает (нет POSIX-переносимого способа создания ссылки на файл, заданный дескриптор файла). Лучшим вариантом является переименование, контрольная сумма, отмена связи, закрытие, которое позволяет отменить переименование или повторить копию, если контрольная сумма не совпадает. Вам все еще нужно подумать о том, что вы хотите сделать, если третья программа тем временем воссоздает файл.
POSIX предлагает только кооперативные замки. Если у вас есть контроль над программами, которые могут изменять файл, убедитесь, что они используют блокировки; если это не вариант, вы застряли без замков.
Нет портативного способа узнать, какие (или даже нет) процессы открыли файл. В большинстве систем Unix lsof
покажет вам, но это не универсально, не надежно (программа может открывать файлы сразу после завершения поиска lsof
) и неполно (если файлы экспортируются через NFS, возможно, быть не в состоянии узнать об активных клиентах).
Вам может быть полезно узнать, что делают другие программы синхронизации, такие как rsync и unison.