![Почему Windows блокирует файлы во время установки, а Linux не блокирует файлы?](https://rvso.com/image/1400028/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83%20Windows%20%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D1%83%D0%B5%D1%82%20%D1%84%D0%B0%D0%B9%D0%BB%D1%8B%20%D0%B2%D0%BE%20%D0%B2%D1%80%D0%B5%D0%BC%D1%8F%20%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8%2C%20%D0%B0%20Linux%20%D0%BD%D0%B5%20%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D1%83%D0%B5%D1%82%20%D1%84%D0%B0%D0%B9%D0%BB%D1%8B%3F.png)
Я заметил, что когда файл запускается в Windows (.exe или .dll) для установки, он блокируется и не может быть изменен, тогда как Linux позволяет пользователю изменять его путем удаления/редактирования.
Почему Windows блокируется, а Linux нет? Есть ли преимущество в блокировке?
решение1
Обе операционные системы блокируют данные файла. Любая попытка изменить исполняемый файл во время его работы или библиотеку во время ее отображения приведет к ошибке «текстовый файл занят» в Linux.
$ gcc foo.c -o f
$ ./f &
[1] 2017
$ ls > f
bash: f: Text file busy
Разница только в том,чтозаблокирован. Windows блокирует запись каталога, Linux блокирует данные файла. Это различие существует по историческим причинам — давным-давно Windows рассматривала записи каталога и данные файла как по сути эквивалентные, и для сохранения совместимости многие последствия этой конструкции были сохранены. Linux всегда рассматривал записи каталога как указатель на данные файла.