Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСиСП теория 4 семестра - методичка слайдов Бранцевич Петр Юльянович 2009.doc
Скачиваний:
160
Добавлен:
15.06.2014
Размер:
1.75 Mб
Скачать

2.13 Переименование файла

#include <stdio.h>

int rename(const char *oldpath, const char *newpath);

В этом случае вместо существующего ранее файла создается новое имя файла, ничего другого не меняется. Но POSIX стандартизировал его и для файлов и, и для каталогов.

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

В случае успеха системный вызов rename() возвращает значение 0, а к фай­лу, на который раньше указывал путь oldpath, после этого можно обращаться только при помощи пути newpath. В случае ошибки вызов возвращает -1, не меняет oldpath и newpath и присваивает переменной errno одно из следующих значений:

EACCESS – у вызывающего процесса нет разрешения на запись в родительский каталог файла oldpath или newpath, разрешения на поиск для компонента пути oldpath или newpath или разрешения на запись для oldpath, если oldpath — это каталог. Последний случай может быть проблемой, так как вызову rename() приходится обновлять каталог, когда oldpath является каталогом.

EBUSY – oldpath или newpath — это точка монтирования.

EFAULT – параметр cldpath или newpath содержит недопустимый указатель.

EINVAL – путь newpath является составляющей oldpath и, таким образом, переименование одного в другой сделает oldpath подкаталогом самого себя.

EISDIR – путь newpath существует и является каталогом, но oldpath — не каталог.

ELOOP – при разрешении пути oldpath или newpath встретилось слишком много сим­волических ссылок.

EMLINK – на oldpath уже указывает максимальное число ссылок, или oldpath — это каталог, а на newpath уже указывает максимальное число ссылок.

ENAMETOOLONG – слишком длинное значение oldpath или newpath.

ENOENT – компонент oldpath или newpath не существует или является повисшей симво­лической ссылкой.

ENOMEM – недостаточно памяти ядра для выполнения данного запроса.

ENOSPC – недостаточно пространства на устройстве для выполнения данного запроса.

ENOTDIR – компонент (за исключением потенциально последнего компонента) oldpath или newpath не является каталогом или oldpath — это каталог, a newpath существует и не является каталогом.

ENOTEMPTY – newpath — это каталог и он не пуст.

EPERM – по крайней мере, один из указанных в аргументах путей существует, для ро­дительского каталога установлен бит закрепления в памяти, действительный идентификатор пользователя вызывающего процесса не совпадает ни с идентификатором пользователя файла, ни с идентификатором пользователя его предка, и процесс не привилегированный.

EROFS – файловая система помечена как доступная только для чтения.

EXDEV – oldpath и newpath принадлежат разным файловым системам.

2.14 Файловая система ос unix

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

Том файловой системы – данные, которые располагаются на выделенном носителе информации и эти тома могут монтироваться или демонтироваться в единую файловую систему. Если рассматривать структурно файловую систему, то она выглядит примерно следующим образом:

Загрузочный блок

Суперблок

Блок индексного дескриптора inode

Информационный блок

Загрузочный блок используется для расположения стандартной информации ОС и имеет нулевой логический номер. Физически он не обязан располагаться на нулевом номере, но с точки зрения логики – ноль. Это аппаратно зависимая часть ОС и информация, которая записана в нем, тоже аппаратно зависима.

Суперблок содержит основную информацию о системе (полный размер файловой системы; число блоков, отведенных под индексные дескрипторы; даты создания и обновления; и другую служебную информацию).

Блоки индексных дескрипторов располагают индексные дескрипторы или информационные узлы, в которых хранится информация о файлах. Часть из них может быть занята, часть – свободна. Где-то еще храниться информация, какие из них заняты, а какие свободны (в некоторых случаях – в суперблоке, иногда выделяются отдельные области).

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

Типы файловой системы:

  1. s5fs. В такой файловой системе длина имен файлов занимает 14 байт, имеется ограничение на количество файлов. Она считается не надежной, т.к. в ней только одна копия суперблока;

  2. ffs. Считается быстрой файловой системой, т.к. в нем осуществляется быстрый доступ к данным. В отличие от файловой системы s5fs, в ffs храниться несколько копий данных;

и др.

Также имеется ext – семейство файловых систем (ext2 или ext3, где ext3 – это журнальный вариант ext2). В данной теме как раз и будет рассмотрена вайловая система ext2.