ВУЗ:
Составители:
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