Makefile - нет такой ошибки файла или каталога

В основном вам нужно сделать следующее (если я правильно понял ваш вопрос):

ln -s /path/to/file /path/to/symlink
5
28.05.2019, 23:36
1 ответ

I am not sure how it works across different FS.

Сама операция переименования не работает в разных файловых системах; нет никакой разницы между записью в файл, скажем, из текстового редактора и записью в файл с помощью cpс исходным файлом в другой файловой системе.

В Linux системный вызов renameпрозрачен для других ссылок на файл, включая другие жесткие ссылки и описания открытых файлов (и дескрипторы ). В справочной странице явно указано

Open file descriptors for oldpath are also unaffected.

(Я уточняю «в Linux» только потому, что не смог найти ссылку на POSIX; Я думаю, что это распространено в операционных системах стиля POSIX -.)

Таким образом, когда вы копируете файл между файловыми системами, cpоткрывает источник для чтения, цель для записи и начинает копирование. Операции переименования не влияют на используемые файловые дескрипторы; вы можете переименовать источник и/или цель, не затрагивая cp.

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

Предостережения, на которые следует обратить внимание, заключаются в том, что такие инструменты, как mv, не ограничивают себя тем, что может сделать системный вызов rename; если вы mvфайлы в разных файловых системах, renameзавершится ошибкой (или mvобнаружит, что операция выполняется в файловых системах, и даже не попытается ее выполнить ), а mvзатем прибегнуть к ручному копированию содержимого файла и удалению оригинала. Это не даст хороших результатов, если переименовываемый файл одновременно изменяется.

5
27.01.2020, 20:40

Теги

Похожие вопросы