Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shp.doc
Скачиваний:
17
Добавлен:
18.09.2019
Размер:
5.46 Mб
Скачать
  1. Базовые примитивы доступа к файлам

Базовые примитивы доступа к файлам состоят из небольшого набора системных вызовов, которые обеспечивают прямой доступ к средствам ввода/вывода, обеспечиваемым ядром UNIX.

Примитивы UNIX:

Имя Функция

open Открывает файл для чтения или записи либо создает пустой файл

creat Создает пустой файл

close Закрывает открытый файл

ead Считывает информацию из файла

write Записывает информацию в файл

lseek Перемещается в заданную позицию в файле

unlink Удаляет файл

remove Другой метод удаления файла

Типичная программа UNIX вызывает для инициализации файла вызов open (или creat), а затем использует вызовы read, write или lseek для работы с данными в файле. Если файл больше не нужен программе, она может вызвать close, показывая, что работа с файлом завершена. Если пользователю больше не нужен файл, его можно удалить из системы при помощи вызова unlink или remove.

6. Системные вызовы идентификации пользователей и права доступа

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

Владелец файла позже может быть изменен, но только суперпользователем или владельцем файла. Следует отметить, что суперпользователь имеет имя root и его идентификатор uid всегда равен 0.

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

Группы пользователей определяются в файле /etc/group. Каждая из них определена своим идентификатором gid, который, как и uid, является неотрицательным числом. Группа пользователя по умолчанию задается четвертым полем записи о нем в файле паролей.

Права доступа определяют возможности доступа к файлу других пользователей. Они затрагивают три группы пользователей:

  1. владелец файла;

  2. все пользователи, кроме владельца файла, принадлежащие к связанной с файлом группе;

  3. все пользователи, не входящие в категории 1 или 2.

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

  • чтение из файла;

  • запись в файл;

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

Система хранит связанные с файлом права доступа в битовой маске, называемой кодом доступа к файлу (file mode). Хотя заголовочный файл <sys/stat.h> и определяет символьные имена для битов прав доступа

  1. Файлы с несколькими именами

Один и тот же набор данных может быть связан с несколькими именами UNIX без необходимости создания копий файла.

Каждое такое имя называется жесткой ссылкой (hard link). Число связанных с файлом ссылок называется счетчиком ссылок (link count).

Новая жесткая ссылка создается при помощи системного вызова link, а существующая жесткая ссылка может быть удалена при помощи системного вызова unlink. Системный вызов st_nlink. Число ссылок, указывающих на этот файл (другими словами, число различных имен файла, так как жесткие ссылки неотличимы от «настоящего» имени). Это значение обновляется при каждом системном вызове link и unlink.

Системный вызов link.

Оriginal_path – указатель на массив символов, содержащий полное имя файла в системе UNIX. Он должен задавать существующую ссылку на файл. New_path – задает новое имя файла или ссылку на файл, но файл, заданный параметром new_path, еще не должен существовать. Системный вызов link возвращает значение 0 в случае успешного завершения и -1 – в случае ошибки. В последнем случае новая ссылка на файл не будет создана.

Системный вызов unlink. Фактически системный вызов unlink просто удаляет указанную ссылку и уменьшает счетчик ссылок (link count) файла на единицу. Данные в файле будут безвозвратно потеряны только после того, как счетчик ссылок на него станет равным нулю, и он не будет открыт ни в одной программе.

Системный вызов symlink. Symlink используется для создания символьной ссылки.

После завершения вызова symlink создается файл symname, указывающий на файл realname. Если возникает ошибка, например, если файл с именем symname уже существует, то вызов symlink возвращает значение -1. В случае успеха вызов возвращает нулевое значение. Если затем файл символьной ссылки открывается при помощи open, то системный вызов open корректно прослеживает путь к файлу realname.

Системный вызов readlink. Используется, если необходимо считать данные из самого файла symname.

Системный вызов readlink вначале открывает файл sympath, затем читает его содержимое в переменную buffer, и, наконец, закрывает файл sympath. Возвращаемое вызовом readlink значение равно числу символов в буфере или -1 – в случае ошибки.

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