Лекции по курсу "Системное программирование для UNIX". Литвинов Д.Г. - 2 стр.

UptoLike

Составители: 

2
Файловая система Linux
Открытие и закрытие файлов
В данном курсе рассматриваются лишь основополагающие методы работы с
файловой системой, имеющиеся в подавляющем большинстве UNIX-систем.
Рассмотрен только элементарный файловый ввод/вывод, а также некоторые
современные методы работы с файлами, как отображение в память. Практически
полностью опущен механизм файловой системы, позволяющий работать с каталогами,
ссылками, атрибутами файлов.
Системные функции работы с файлами классифицируются на несколько
категорий, хотя некоторые из функций присутствуют более, чем в одной категории:
Системные функции, возвращающие дескрипторы файлов для
использования другими системными функциями;
Системные функции анализирующие имя пути поиска;
Системные функции, назначающие и освобождающие индекс файла;
Системные функции, устанавливающие или изменяющие атрибуты файла;
Системные функции, позволяющие процессу производить ввод-вывод
данных;
Системные функции, изменяющие структуру файловой системы;
Системные функции, позволяющие процессу изменять собственное
представление о структуре дерева файловой системы.
Открытие и закрытие файлов
Ниже рассматриваются функции, позволяющие открыть и закрыть файлы,
используя файловые дескрипторы. Функции creat и open определены в заголовочном
файле <fcntl.h>, а функция close – в файле <unistd.h>.
int open (const char *FILENAME, int FLAGS[, mode_t MODE])
Функция создает и возвращает файловый дескриптор для файла, имя которого
задано в FILENAME. После открытия файла указатель данных установлен на начало
файла. Аргумент MODE используется только в том случае, если файл уже создан,
однако передавать его в параметре можно в любом случае. Аргумент FLAGS задает
способ, которым будет открыт файл. Он представляет собой битовую маску, значение
может быть сформировано с помощью логического И.
В случае нормального завершения функция возвращает целое положительное
значение, представляющее собой дескриптор файла. В противном случае возвращается
–1. Переменная errno может принимать следующие значения:
EACCES Файл существует, но не может быть прочитан или записан способом,
указанным аргументом FLAGS или файл не существует, а каталог не
имеет разрешения на запись;
EEXIST Флаги O_CREAT и O_EXCL, а файл уже существует;
EINTR Операция открытия была прервана пришедшим сигналом;
EISDIR FLAGS задает операцию записи, а файл является каталогом;
EMFILE Процесс имеет слишком много открытых файлов. Максимальное
значение открытых файлов задается макросом RLIMIT_NOFILE;
ENFILE Операционная система или файловая система, в которой расположен
файл не поддерживает дополнительных открытых файлов;
ENOENT Заданный файл не существует, а флаг O_CREAT не установлен;
ENOSPC Каталог или файловая система не может быть расширена по причине
отсутствия дискового пространства;
Файловая система Linux

        Открытие и закрытие файлов
        В данном курсе рассматриваются лишь основополагающие методы работы с
файловой системой, имеющиеся в подавляющем большинстве UNIX-систем.
Рассмотрен только элементарный файловый ввод/вывод, а также некоторые
современные методы работы с файлами, как отображение в память. Практически
полностью опущен механизм файловой системы, позволяющий работать с каталогами,
ссылками, атрибутами файлов.
        Системные функции работы с файлами классифицируются на несколько
категорий, хотя некоторые из функций присутствуют более, чем в одной категории:
        • Системные      функции, возвращающие дескрипторы файлов для
            использования другими системными функциями;
        • Системные функции анализирующие имя пути поиска;
        • Системные функции, назначающие и освобождающие индекс файла;
        • Системные функции, устанавливающие или изменяющие атрибуты файла;
        • Системные функции, позволяющие процессу производить ввод-вывод
            данных;
        • Системные функции, изменяющие структуру файловой системы;
        • Системные функции, позволяющие процессу изменять собственное
            представление о структуре дерева файловой системы.

   Открытие и закрытие файлов
       Ниже рассматриваются функции, позволяющие открыть и закрыть файлы,
используя файловые дескрипторы. Функции creat и open определены в заголовочном
файле , а функция close – в файле .
       int open (const char *FILENAME, int FLAGS[, mode_t MODE])
        Функция создает и возвращает файловый дескриптор для файла, имя которого
задано в FILENAME. После открытия файла указатель данных установлен на начало
файла. Аргумент MODE используется только в том случае, если файл уже создан,
однако передавать его в параметре можно в любом случае. Аргумент FLAGS задает
способ, которым будет открыт файл. Он представляет собой битовую маску, значение
может быть сформировано с помощью логического И.
        В случае нормального завершения функция возвращает целое положительное
значение, представляющее собой дескриптор файла. В противном случае возвращается
–1. Переменная errno может принимать следующие значения:
EACCES         Файл существует, но не может быть прочитан или записан способом,
               указанным аргументом FLAGS или файл не существует, а каталог не
               имеет разрешения на запись;
EEXIST         Флаги O_CREAT и O_EXCL, а файл уже существует;
EINTR          Операция открытия была прервана пришедшим сигналом;
EISDIR         FLAGS задает операцию записи, а файл является каталогом;
EMFILE         Процесс имеет слишком много открытых файлов. Максимальное
               значение открытых файлов задается макросом RLIMIT_NOFILE;
ENFILE         Операционная система или файловая система, в которой расположен
               файл не поддерживает дополнительных открытых файлов;
ENOENT         Заданный файл не существует, а флаг O_CREAT не установлен;
ENOSPC         Каталог или файловая система не может быть расширена по причине
               отсутствия дискового пространства;


       2