Различия между созданием файла, связанного символическими ссылками и жесткими ссылками - PullRequest
0 голосов
/ 13 апреля 2019

Я прочитал несколько сообщений о символических ссылках и жестких ссылках, но я хотел бы подтвердить свою концепцию по этому поводу, поскольку существует определенное поведение, которое мне совершенно неясно. Рассмотрим эту последовательность команд командной строки.

$ echo abc >file1
$ ln file1 file2 OR $ ln -s file1 file2
$ rm file1
edit content file2 to be different, using vim
$ cat file1

Если я буду следовать этой последовательности инструкций для 2 случаев: 1, который создает жесткую ссылку, и одного, который создает символическую ссылку, я могу объяснить, почему file1 не будет существовать после последовательности, но не могу реально объяснить, почему file1 будет существовать после последовательность.

Следующая моя попытка.

Жесткий кейс:

to разыменовывается из file1. Следовательно, file1 больше не существует, но индекс, с которым он связан, все еще существует, так как file2 все еще связан с Это. Редактирование файла 2 изменит только его содержимое.

Чехол с мягкой связью:

файл1 удален, а индекс, с которым связан файл1, разыменован. (file2 не ссылается на inode, а скорее на file1) Следовательно, file1 больше не существует, и индекс, с которым он связан, освобожден и может быть перезаписан, так как больше нет файлов ссылаясь на него.

Редактирование файла 2 воссоздает файл1, так как файл2 по-прежнему символически связан с file1, который затем будет ссылаться на новый индекс, который будет иметь указатель на отредактированный файл content.file1 удален, а индекс, к которому подключен файл1

Я не совсем уверен, правильна ли логика создания индекса для символьных ссылок, может ли кто-нибудь подтвердить мое понимание?

1 Ответ

0 голосов
/ 23 апреля 2019

Почти;в последнем случае открытие «file2» O_CREAT:

  int fd = open("file2", O_CREAT|..., 0644);

создаст «file1», как вы заметили.Это не совсем прозрачно, так как stat () и readlink () могут раскрыть висячую ссылку.Если ваш редактор хорошо себя ведет (vi), он должен работать так, как вы обнаружили.Это работает под Linux и, по крайней мере, один UNIX.

...