До выполнения операций ввода-вывода в файл (из файла) на низком уровне необходимо открыть или создать файл одной из следующих функций: open( ), sopen( )илиcreat( ).
Функция sopen( )используется в том случае, когда необходимо дать возможность одновременного доступа к файлу для нескольких выполняющихся программ. Разумеется, речь идет о доступе к файлу в режиме чтения. Обычно файл блокируется для доступа со стороны других выполняющихся программ, и именно функция sopen( ) необходима для разрешения одновременного доступа.
При открытии файла в программу возвращается дескриптор файла, значение которого является целочисленным. В отличие от дескриптора указатель на поток есть указатель на структуру типа FILE,определенного в заголовочном файле stdio.h.
Формат вызова функции open( ),в результате выполнения которой приобретает значение дескриптор файла:
fd = open( имя_файла, флаги, права_доступа);
В программе дескриптор файла fd должен быть определен как intfd. Параметр имя_файла является указателем на массив символов, содержащий имя файла.
Второй параметр флаги определяет режим открытия файла, который является выражением, сформированным (с помощью '|' - побитовой операции ИЛИ) из одной или более предопределенных констант, размещенных в заголовочном файле fcntl.h.В некоторых реализациях UNIX эти константы находятся в файле sys/file.h.
Примечание.Обратите внимание на то, что в UNIX при образовании полного имени файла применяется символ '/' (прямой слэш), а не обратный слэш ('\'), как в MS-DOS.
Приведем в алфавитном порядке список констант, задающих режим открытия файла, с кратким описанием их назначения:
- открыть файл для добавления (для записи в конец файла);
- открыть файл в бинарном режиме (см §7.1.1);
- создать и открыть новый файл;
- если он указан вместе с флагом O_CREAT и файл уже существует, то функция открытия файла завершается с ошибкой. Этот флаг позволяет избежать непреднамеренного уничтожения уже существующего файла;
- открыть файл только для чтения;
- открыть файл и для чтения, и для записи;
- открыть файл в текстовом режиме (см.§7.1.1);
- открыть существующий файл и стереть его содержимое (подготовить для записи новой информации).
Обратите внимание на то, что режим открытия файла должен быть задан обязательно, таккак его значениепо умолчанию не устанавливается.
Третий параметр - права_доступа должен применяться только в режиме открытия файла O_CREAT,т.е. только при создании нового файла.
В операционных системах MS-DOS и Windows для задания параметра права_доступа используются следующие предопределенные константы: