Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция2013.docx
Скачиваний:
7
Добавлен:
31.03.2015
Размер:
72.11 Кб
Скачать

1.2.4. Создание файла. Системный вызов creat().

Прототип системного вызова:

#include <fcntl.h>

int creat(const char *path, int mode);

Описание системного вызова

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

Как и для вызова ореn, аргумент path определяет имя файла в файловой системе, a mode — устанавливаемые права доступа к файлу.

Системный вызов creat эквивалентен системному вызову open() с параметром flags, установленным в значение O_CREAT | O_WRONLY | O_TRUNC.

Возвращаемые значения

Системный вызов возвращает значение файлового дескриптора для открытого файла при нормальном завершении и значение -1 при возникновении ошибки.

1.2.5. Создание жесткой ссылки. Системный вызов link().

Прототип системного вызова:

#include <unistd.h>

int link(char *pathname, char *linkpathname);

Описание системного вызова

Системный вызов link служит для создания жесткой связи к файлу с именем, на которое указывает параметр pathname. Указатель на имя создаваемой связи задается параметром linkpathname (полное или относительное имя связи). Во всех существующих реализациях операционной системы UNIX запрещено создавать жесткие связи к директориям. В операционной системе Linux (по непонятной причине) дополнительно запрещено создавать жесткие связи к специальным файлам устройств. Надо отметить, что системный вызов link является одним из немногих системных вызовов, совершающих операции над файлами, которые не требуют предварительного открытия файла.

Возвращаемые значения

Системный вызов возвращает значение 0 при нормальном завершении и значение -1 при возникновении ошибки (если файл с именем создаваемой связи уже существует; а также если мы попытаемся создать связь на другом физическом внешнем устройстве).

1.2.6. Удаление жесткой ссылки. Системный вызов unlink().

Прототип системного вызова:

#include <unistd.h>

int unlink(char *pathname);

Описание системного вызова

Системный вызов unlink служит для удаления имени, на которое указывает параметр pathname, из файловой системы.

Если после удаления имени счетчик числа жестких связей у данного файла стал равным 0, то возможны следующие ситуации.

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

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

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

- если имя относится к файлу типа "связь", то он удаляется, и мягкая связь оказывается разорванной.

Возвращаемые значения

Системный вызов возвращает значение 0 при нормальном завершении и значение -1 при возникновении ошибки.

Пример 4

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]