Я задаю этот вопрос, потому что я хотел бы иметь возможность распаковать архив, который также может содержать саму программу, которая вызывает 7zip для распаковки архива. Linux/UNIX позволяет удалять или переименовывать файл во время его использования, но не позволяет открывать его для записи.
2 ответа
Ответ и да и нет.
С помощью команды extract для 7zip не должен быть создан временный файл. Это происходит в Windows, хотя при использовании перетаскивания в Windows Explorer (взято из документации на http://www.7-zip.org/faq.html, ctl-f search для temp)
Вы на Linux, хотя.
Чтобы быть на 100% уверенным, что в Linux этого не происходит, я создал, а затем распаковал большой архив и запустил программу через strace:
strace -a88 - 7z e byob.7z 2> & 1
Я видел только существующие файлы в текущем рабочем каталоге, не связанные до перезаписи, и единственными доступными файлами были файлы в текущем рабочем каталоге.
Пожалуйста, проверьте себя, чтобы убедиться, что я что-то не пропустил.
Я надеюсь, что это поможет вам.
Ваш вопрос касается исполняемого файла (или скрипта) file1
, вызывающего механизм, который создает новый file1
(там же).
Из того, что я понимаю о файловых системах в Unix, это требует клопа file1
пока он открыт (для выполнения). Как это происходит, Clobber приводит к тому, что исходный file1
становится несвязанным, но, поскольку он открыт, он на самом деле не удаляется. Однако он больше не занимает имя file1
в этом каталоге. Новый file1
создается в отдельном месте (используя правильное имя). Когда старый file1
завершает выполнение и выходит, он удаляется. Вы должны остаться с новым существующим file1
.
Предостережение: Это в основном догадки, основанные на моих частичных знаниях. Возможно, кто-то здесь с большим количеством концепций файловых систем подтвердит или исправит это. Между тем, я предлагаю вам принять этот ответ только как теоретический и не основывать свои решения на нем без дальнейшей экспериментальной проверки.