Подтвердить что ты не робот

Есть ли момент, когда файл "не существует" во время переименования?

У нас есть сторонняя Java-программа черного ящика, которая принимает входные файлы из местоположения и делает PDF файлы. Он помещает файл манифеста в одно и то же место каждый раз для каждого ввода, что требует от нас питания файла контролируемым образом. Существует ли манифест (или .xen/.que)? Не загружайте входной файл.

Мы получаем очень редкие (один из десятков тысяч файлов) экземпляры нашего фида script, не нахожу ничего, подавая файл, и результирующую ошибку, когда манифест перезаписывается, а вещи не совпадают, Я написал perl script, который ничего не делает, кроме как распечатать время до 100-тысячных, глотать что-нибудь в каталоге, который нас интересует, и распечатать его. Ниже вы можете видеть файлы .xen и .que, где .xen - это вход, а .que - переименованная версия для указания обработки.

Теперь мой вопрос: как возможно отсутствие файлов на 94.26493? ОС скрывает файл во время его переименования? Мы получаем нашу проблему, когда программа подачи ищет файлы в тот момент, поэтому мой запланированный взлом - это проверить файлы дважды; надеюсь, достаточно медленно, чтобы поймать любой конец переименования. Я должен также указать, что как только в строке появятся 2 файла, то есть там, где программа подачи добавила другой файл. Это не тот же файл, что и до переименования.

1421417394.26392/gpfs/fsdd/projects/corr_esch/corr_esch.d.xen
1421417394.26416/gpfs/fsdd/projects/corr_esch/corr_esch.d.xen
1421417394.26442/gpfs/fsdd/projects/corr_esch/corr_esch.d.xen
1421417394.26468/gpfs/fsdd/projects/corr_esch/corr_esch.d.xen
1421417394.26493
1421417394.26907/gpfs/fsdd/projects/corr_esch/corr_esch.d.xen.que_142_1421417394265
1421417394.27426/gpfs/fsdd/projects/corr_esch/corr_esch.d.xen /gpfs/fsdd/projects/corr_esch/corr_esch.d.xen.que_142_1421417394265
1421417394.27456/gpfs/fsdd/projects/corr_esch/corr_esch.d.xen /gpfs/fsdd/projects/corr_esch/corr_esch.d.xen.que_142_1421417394265
1421417394.27486/gpfs/fsdd/projects/corr_esch/corr_esch.d.xen /gpfs/fsdd/projects/corr_esch/corr_esch.d.xen.que_142_1421417394265
1421417394.27528/gpfs/fsdd/projects/corr_esch/corr_esch.d.xen /gpfs/fsdd/projects/corr_esch/corr_esch.d.xen.que_142_1421417394265
4b9b3361

Ответ 1

Фактическая гарантия в POSIX заключается в том, что если вы переименуете a в b и b уже существует, во время переименовать, когда b не существует. Он будет ссылаться либо на ранее существовавший b, либо на новый b, ранее называемый a.

Если b еще не существует (что похоже на ваш пример), тогда гарантия не применяется. Возможно, существует момент, когда не существует ни a, ни b (это зависит от того, как работает конкретная файловая система). Также возможно, что существует момент, когда существуют как a, так и b (и относятся к одному и тому же файлу).

Ваше предлагаемое решение по проверке дважды с короткой задержкой, вероятно, является самым простым подходом.