Перемещение Файла, В то время как Это используется — Как это работает?

Я заметил, что на ОС не-Windows.... т.е. linux/mac могу сделать вещи как: - отправляют, zip другу по цели - Удаляют файл, в то время как это находится в передаче

И передача не перестала работать.

Или, я могу сделать операции как.. - запускаются, фильм - стирают файл - кинокадр подыгрывает завершению (чтение от диска, не только буферизованного в памяти)

Хотя файлы "удаляются", как я упомянул, они на самом деле перемещаются в другое местоположение в файловой системе... т.е. каталоге Trash или чем-то. Таким образом, это кажется мне как использование ОС указателем файл, который обновляется, когда это перемещается вместо того, чтобы получить доступ к файлам непосредственно.

Кто-либо может пролить некоторый свет на то, как эта ПОТРЯСАЮЩАЯ возможность на самом деле реализована? Я даже не уверен, что погуглить для получения дополнительной информации о нем.

спасибо.

31
задан 27.02.2011, 22:20

4 ответа

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

Операционная система поддерживает количество ссылок на inode. Пока существуют ссылки на inode, inode и данные файла сохранены. Однажды все ссылки на inode удалены, inode, и пространство, требуемое файлом, освобождено.

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

Править: Как другой отметили, перемещения файла на том же устройстве сделаны, не перемещая данные. Вместо этого новая запись каталога создается в целевом каталоге, и исходная запись каталога удалена.

Возможно иметь несколько записей каталога для того же файла. Их называют жесткими ссылками. Они создаются путем создания новой записи каталога для файла, не удаляя исходную запись. inode файловой системы имеет подсчет ссылок для записи количества записей каталога, указывающих на файл.

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

В случае сбоя питания или другого неорганизованного завершения работы системы, диск будет нуждаться fsck (проверка файловой системы), прежде чем это сможет быть полностью смонтировано. В зависимости от состояния дискового inode и структур каталогов, будет восстановлено пространство, файл останется в каталоге, или новая запись будет сделана в lost+found каталог. Результаты будут зависеть, на котором изменения были сброшены к диску или записаны в журнал файловых систем.

29
ответ дан 07.12.2019, 09:14

Как объяснил Matt Jenkins, ОС (файловая система) отслеживает файлы, которые сохранены открытыми приложениями. Пока процесс сохраняет файл открытым, его данные остаются на диске (даже при том, что он был удален и больше не видим или доступен для других программ.

Обратите внимание, что последствие этого - то, что пространство, занятое файлом, может только быть освобождено, после того как последний процесс с помощью него закрыл его. Это - FAQ для операций файловой системы Linux/Unix: "команда 'df' говорит, что раздел полон, в то время как 'du' сообщает о свободном пространстве" (см., например, http://batleth.sapienti-sat.org/projects/FAQs/ext3-faq.html). Если необходимо освободить пространство, недостаточно удалить большие файлы (например, файлы журнала), необходимо также удостовериться, что никакой процесс не сохраняет их открытыми (обычно проблема с файлами журнала).

6
ответ дан 07.12.2019, 09:14

В файловых системах Unix файл может иметь одну или несколько жестких ссылок на него. Жизни файла пока существует по крайней мере один. Когда последний удален, пространство файла освобождено. ссылка выше даст Вам, начальная точка для большего количества чтения - видит особенно раздел "Link counter".

0
ответ дан 07.12.2019, 09:14

Это довольно просто на самом деле. Файл ведет список ссылок - процессы, которые получают доступ к файлу. При удалении файла, он просто удаляет список из каталога, но не самого файла. Программы, которые все еще имеют открытый файл, могут все еще получить доступ к нему. Файл только на самом деле удален, когда все программы, которые получают доступ к нему, закрывают его.

Кроме того, с перемещением файла - если это в той же файловой системе - файл на самом деле не перемещается как таковой, это просто изменяет указатель на каталог, в котором находится файл.

2
ответ дан 07.12.2019, 09:14

Теги

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