Системный вызов rename - Morozov-5F/operational-system-docs GitHub Wiki
Обычный файл представляет собой массив байтов, и может читаться и записываться, начиная с произвольного байта файла. В самом файле не хранится никакой системной информации о файле, но в файловой системе размещается некоторая информация о владельце, правах доступа и об использовании каждого файла. Имена файлов хранятся в файле особого типа, который называется каталогом. Информация о файле в каталоге называется записью каталога и включает, кроме имени файла, указатель на сам файл. Записи каталога могут ссылаться как на другие каталоги, так и на обычные файлы. Таким образом формируется иерархия каталогов и файлов, которая и называется файловой системой filesystem.
Процесс обращается к файлу, указывая путь до него, который является строкой, состоящей из нескольких или ни одного имен файлов, разделенных символами слэша (/).. Системный вызов `rename` может использоваться для присвоения файлу нового имени в файловой системе с заменой старого имени файла. Данная операция может быть смоделирована копированием данного файла в файл с новым именем и последующим его удалением.
На самом деле, есть одно существенное отличие между просто вызовом `rename` и копированием файла с новым именем с последующим удалением исходного. Она состоит в том, что при копировании файла будет создаваться новая запись на диске (i-узел), а старый будет удален, когда как `rename` просто изменяет имя файла в файле каталога, не изменяя физического расположения файла на диске. Как следствие, для переименования файла путем копирования, на диске должно быть достаточно места, чтобы скопировать файл. Вторым следствием будет наличие нескольких копий файла, если на исходный файл существовала еще одна жесткая ссылка. Таким образом, в большинстве случаев можно использовать простое копирование файла с новым именем, но это не яявляется эффективной операцией.