Целью файловой системы является абстрагировать пользовательскую программу от сложных операций с контроллерами устройств хранения данных, заменив их на простую логическую модель файлов
Файл — это именованная единица внешней памяти определенного пользователем размера, над которой могут быть выполнены операции чтения и записи данных.
Типы файлов:
Обычные пользовательские файлы
текстовые (ASCII);
двоичные.
Каталоги — системные файлы, необходимые для организации файлов.
Системные специальные файлы (представляют внешние устройства и объекты ОС)
символьные (последовательные устройства);
блочные.
Каталоги (папки) — это специальные файлы, позволяющие группировать имеющиеся файлы, образуя дерево так, что каждый каталог (узел дерева) содержит относительно небольшое количество других файлов и каталогов.
Пути:
В качестве разделителя в ОС Unix используется дробная черта /, в ОС Windows — обратная дробная черта \
В путях могут встречаться особые имена:
. (точка) — указывает на текущий каталог;
.. (две точки) — указывает на родительский каталог.
Виды путей:
Абсолютный путь — содержит путь к файлу от вершины дерева каталогов (корневой папки)
в ОС Unix абсолютные пути начинаются с разделителя: /usr/local/apache
в ОС Windows абсолютные пути начинаются с имени диска и двоеточия: C:\Windows\explorer.exe
Относительный путь — содержит путь к файлу относительно текущего каталога, он начинается с имени файла или каталога: ../../usr/bin/perl
работает как предыдущая схема, но указатели хранятся не в самих блоках, а в отдельной таблице;
производительность растет, но таблица занимает много места в памяти, особенно при больших дисках;
наиболее известные ее реализации — FAT16 и FAT32, используемые в MS Windows.
Работа с файлами в CRT
В CRT существуют два способа работы с файлами:
работа на низком уровне (функции типа open, read, write, close) — функции прямо соответствуют системным вызовам ОС;
потоковый ввод/вывод (функции типа fopen, fread, fwrite, fclose, fprintf, fgets, fscanf) — обеспечивает дополнительную буферизацию средствами CRT и форматированный ввод/вывод (в случае текстовых файлов).
Эти два метода несовместимы в пределах открытого файла.
Файловые дескрипторы CRT
Для управления доступа процесса к файлам на низком уровне в CRT используются файловые дескрипторы — целые числа, являющиеся номерами в таблице открытых файлов процесса.
Дескриптор получается при открытии файла с помощью функции open, используется при вызовах функций read и write, закрывается при помощи функции close.
Дескрипторы 0, 1 и 2 указывают на стандартные потоки ввода, вывода и ошибок соответственно.
Права доступа к файлам в ОС Unix:
В ОС Unix права определяются тремя битами:
право на исполнение файла (1);
право на запись файла (2);
право на чтение файла (4).
Эти биты формируют число, задаваясь для трех категорий пользователей
для владельца файла (биты 6-8);
для группы владельца (биты 3-5);
для всех остальных пользователей (биты 0-2).
Для записи прав доступа удобно использовать восьмеричную константу, т. к. одна цифра в ней соответствует 24 3-м битам.
Работа с файлами в WinAPI
Дескриптор открытого файла имеет тип HANDLE
Файл открывается (и, при необходимости, создается) функцией CreateFile
Для чтения и записи существуют функции ReadFile и WriteFile
Любой дескриптор типа HANDLE закрывается функцией CloseHandle