Опубликован: 15.06.2004 | Уровень: специалист | Доступ: платный
Лекция 14:

Заключение

< Лекция 13 || Лекция 14: 12345678910

Средства, обслуживающие понятие файла

В трактовке стандарта POSIX понятие файла охватывает все, что может содержать, потреблять и/или поставлять информацию. Файл имеет такие атрибуты, как тип, имя и режим.

В стандарте зафиксированы следующие типы файлов:

  • обычный файл ;
  • каталог ;
  • канал ;
  • символьный специальный файл ;
  • блочный специальный файл ;
  • символьная ссылка ;
  • сокет.

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

В пределах файловой системы каждый файл имеет уникальный идентификатор (порядковый номер - он же номер описателя файла ).

Согласно стандарту, с каждым файлом ассоциирована по крайней мере следующая служебная информация:

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

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

  • владелец файла ;
  • члены владеющей группы ;
  • прочие пользователи.

Для каждой из этих категорий режим доступа определяет права на операции с файлом, а именно:

  • право на чтение ;
  • право на запись ;
  • право на выполнение (для каталогов - право на поиск ).

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

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

  • утилита pwd и функция getcwd() позволяют опросить абсолютное маршрутное имя текущего каталога ;
  • утилита ls и функции семейства stat() (stat(), fstat(), lstat()) выдают информацию о файлах ;
  • утилита df и функции fstatvfs() и statvfs() обеспечивают получение интегральной информации о файловых системах;
  • служебная программа du выдает информацию о суммарном объеме пространства, занятого иерархиями файлов ;
  • утилита cd и функция chdir() позволяют изменить текущий каталог ;
  • утилиты chown и chmod, функции chown(), fchown(), chmod(), fchmod() служат для изменения таких атрибутов файлов, как владелец и режим доступа;
  • утилита touch модифицирует время последнего доступа и/или изменения файла.

Создание обычных файлов обслуживается функцией creat(), создание каталогов - утилитой mkdir и одноименной функцией, создание каналов - утилитой mkfifo и одноименной функцией.

Новые ссылки на файл (жесткие или символьные) создают служебная программа ln, а также функции link() и symlink().

Для удаления файлов служат утилиты rm и rmdir, функции unlink(), rmdir() и remove().

Копирование файлов выполняется служебной программой cp, перемещение - программой mv или функцией rename().

Обход файловой иерархии и систематическую обработку ее элементов осуществляет утилита find.

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

В стандарте POSIX -2001 выделены две основные группы функций, обслуживающие операции ввода/вывода:

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

Для открытия файлов и формирования новых описаний открытых файлов, файловых дескрипторов и потоков служат функции нижнего уровня open() и pipe(), а также функции буферизованного ввода/вывода fopen(), fdopen(), freopen().

Для закрытия файлов предназначены функции close() и fclose().

Весьма полезной с практической точки зрения является функция создания и открытия временных файлов tmpfile().

Чтение данных из файла выполняют функции read() и fread(), запись - функции write() и fwrite().

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

Для буферизованного ввода/вывода байт предназначены функции fgetc() и fputc(), строки рекомендуется вводить, вызывая функцию fgets(), а выводить с помощью функций fputs() и puts().

Индикатор текущей позиции файла может быть опрошен или передвинут посредством функции нижнего уровня lseek(), а также функций буферизованного ввода/вывода fseek(), ftell(), ftello(), fgetpos(), fsetpos(), rewind().

Для выполнения разнообразных управляющих операций над открытым файлом ом предназначена функция fcntl().

Особый класс управляющих операций с файлами со своей системой понятий составляют блокировки, хотя они также оформляются как команды функции fcntl().

Функции setbuf(), setvbuf() и fflush() выполняют управляющие операции с буферами потоков.

< Лекция 13 || Лекция 14: 12345678910
Антон Коновалов
Антон Коновалов

В настоящее время актуальный стандарт - это POSIX 2008 и его дополнение POSIX 1003.13
Планируется ли актуализация материалов данного очень полезного курса?

Ирина Воскресенская
Ирина Воскресенская
Россия, Москва, НИЯУ МИФИ
Максим Баранов
Максим Баранов
Россия