В настоящее время актуальный стандарт - это POSIX 2008 и его дополнение POSIX 1003.13 |
Заключение
Средства, обслуживающие понятие файла
В трактовке стандарта 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() выполняют управляющие операции с буферами потоков.