Я заметил, что в ОС, отличной от Windows .... то есть в Linux / Mac я могу сделать что-то вроде: - Отправить почтовый индекс другу с целью - Удалить файл, пока он в передаче
И передача не подводит.
Или я могу выполнять такие операции, как ... - запустить фильм - стереть файл - фильм все еще воспроизводится до конца (чтение с диска, а не только буферизация в памяти)
Хотя файлы «удаляются», как я уже говорил, на самом деле они перемещаются в другое место в файловой системе ... то есть в каталог Trash или что-то в этом роде. Поэтому мне кажется, что ОС использует указатель @ файл, который обновляется при перемещении, а не напрямую обращается к файлам.
Может кто-нибудь пролить свет на то, как на самом деле реализована эта потрясающая возможность? Я даже не уверен, что Google, чтобы узнать больше об этом.
Спасибо.
источник
Ответы:
Запись каталога - это просто указатель на индекс. Индод содержит метаинформацию о файле (кроме имени) и указатели на данные файла (если есть). Когда вы начинаете копировать файл, вы получаете дескриптор для inode.
Операционная система поддерживает количество ссылок на индекс. Пока есть ссылки на инод, инод и данные файла сохраняются. Как только все ссылки на индекс будут удалены, индекс будет освобожден, а пространство, необходимое для файла.
Поскольку у вас есть файл, открытый для копирования, он будет храниться до тех пор, пока ваш процесс не закроет файл. Это должно произойти, когда передача файла завершится, и произойдет, если процесс копирования завершится неудачно. Если передача файла не удалась на полпути, и вы удалили все жесткие ссылки на файл, вы не сможете успешно перезапустить передачу.
РЕДАКТИРОВАТЬ: Как уже отмечалось, перемещение файлов на том же устройстве выполняется без перемещения данных. Вместо этого в каталоге назначения создается новая запись каталога, а исходная запись каталога удаляется.
Можно иметь несколько записей каталога для одного и того же файла. Это так называемые жесткие ссылки. Они создаются путем создания новой записи каталога для файла без удаления исходной записи. Inode файловой системы имеет счетчик ссылок для записи количества записей каталога, указывающих на файл.
РЕДАКТИРОВАТЬ 2: Если процесс завершится сбоем или будет убит, файл будет аккуратно удален, так как количество обращений в памяти будет уменьшено до нуля. Это действие, которое происходит, когда программа заканчивается нормально.
В случае сбоя питания или другого случайного отключения системы, диск должен быть
fsck
(проверка файловой системы), прежде чем его можно будет полностью смонтировать. В зависимости от состояния inode на диске и структур каталогов, пространство будет восстановлено, файл останется в каталоге или будет сделана новая запись вlost+found
каталоге. Результаты будут зависеть от того, какие изменения были записаны на диск или записаны в журнал файловых систем.источник
/tmp
и сразу жеunlink(2)
его создать . В этот момент в каталоге нет файла (поэтому нечего очищать при выходе или сбое), но ваш процесс все еще имеет доступ к файлу, и никакой другой процесс не может случайно или преднамеренно связываться с ним. Это иллюстрирует свойство интереса.Как объяснил Мэтт Дженкинс, ОС (файловая система) отслеживает файлы, которые остаются открытыми приложениями. Пока процесс сохраняет файл открытым, его данные остаются на диске (даже если он был удален и больше не виден или недоступен для других программ).
Обратите внимание, что следствием этого является то, что пространство, занимаемое файлом, может быть восстановлено только после того, как последний процесс, использующий его, закрыл его. Это часто задаваемые вопросы для операций с файловой системой Linux / Unix: «команда df сообщает, что раздел заполнен, а du сообщает о свободном месте» (см., Например, http://batleth.sapienti-sat.org/projects/FAQs/ext3- faq.html ). Если вам нужно освободить место, недостаточно удалить большие файлы (например, файлы журналов), вы также должны убедиться, что ни один процесс не держит их открытыми (обычно это проблема с файлами журналов).
источник
Это довольно просто на самом деле. Файл содержит список ссылок - процессов, которые обращаются к файлу. Когда вы удаляете файл, он просто удаляет список из каталога, но не сам файл. Программы, которые все еще имеют открытый файл, могут получить к нему доступ. Файл фактически удаляется только тогда, когда все программы, которые обращаются к нему, закрывают его.
Кроме того, при перемещении файла - если он находится в той же файловой системе - файл фактически не перемещается как таковой, он просто меняет указатель на каталог, в котором находится файл.
источник
В файловых системах Unix файл может иметь одну или несколько жестких ссылок на него. Файл живет до тех пор, пока есть хотя бы один. Когда последний удаляется, пространство файла освобождается. ссылка выше даст вам отправную точку для дальнейшего чтения - особенно смотрите раздел «Счетчик ссылок».
источник