Перемещение файла во время его использования – как он работает?

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

И передача не подводит.

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

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

Может ли кто-нибудь пролить свет на то, как эти возможности AWESOME действительно реализованы? Я даже не уверен, что Google, чтобы узнать больше об этом.

Спасибо.

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

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

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

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

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

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

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

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

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

На самом деле это довольно просто. Файл поддерживает список ссылок – процессы, которые обращаются к файлу. Когда вы удаляете файл, он просто удаляет листинг из каталога, но не сам файл. Программы, все еще имеющие открытый файл, могут получить к нему доступ. Файл фактически удаляется только тогда, когда все его программы закрывают его.

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

В файловых системах unix файл может иметь одну или несколько жестких ссылок на него. Файл работает до тех пор, пока есть хотя бы один. Когда последний удаляется, пространство файла освобождается. Ссылка выше даст вам отправную точку для большего чтения – см., В частности, раздел «Счетчик ссылок».

  • Сплит-терминальные окна на Snow Leopard
  • Проблема NASM в 64-разрядной версии OSX
  • Как автоматизировать общие сетевые диски SMB в Mac OS X Lion
  • Могу ли я использовать машину времени с сетевым диском?
  • Установочный диск Mac
  • Как запустить команду / скрипт оболочки при вводе / cd-в каталоге на Snow Leopard?
  • Sublime text 2 command create link, но команда пуста
  • Свяжите расширение файла с приложением в Snow Leopard
  • Пакетные файлы для кодирования
  • Mac OS X Yosemite - Как отключить автоматический выход из системы в режиме ожидания?
  • 403 Запрещенная ошибка в Mac OS X Localhost
  • Давайте будем гением компьютера.