1

Я задаю этот вопрос, потому что я хотел бы иметь возможность распаковать архив, который также может содержать саму программу, которая вызывает 7zip для распаковки архива. Linux/UNIX позволяет удалять или переименовывать файл во время его использования, но не позволяет открывать его для записи.

2 ответа2

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

Я видел только существующие файлы в текущем рабочем каталоге, не связанные до перезаписи, и единственными доступными файлами были файлы в текущем рабочем каталоге.

Пожалуйста, проверьте себя, чтобы убедиться, что я что-то не пропустил.

Я надеюсь, что это поможет вам.

0

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

Из того, что я понимаю о файловых системах в Unix, это требует клопа file1 пока он открыт (для выполнения). Как это происходит, Clobber приводит к тому, что исходный file1 становится несвязанным, но, поскольку он открыт, он на самом деле не удаляется. Однако он больше не занимает имя file1 в этом каталоге. Новый file1 создается в отдельном месте (используя правильное имя). Когда старый file1 завершает выполнение и выходит, он удаляется. Вы должны остаться с новым существующим file1 .

Предостережение: Это в основном догадки, основанные на моих частичных знаниях. Возможно, кто-то здесь с большим количеством концепций файловых систем подтвердит или исправит это. Между тем, я предлагаю вам принять этот ответ только как теоретический и не основывать свои решения на нем без дальнейшей экспериментальной проверки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .