CodeNet / Языки программирования / C / C++ / Linux/Unix / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
open
OPEN
#include <fcntl.h>
#include <sys\types.h>
#include <sys\stat.h>
#include <io.h> требуется только для объявления
функций.
int open(pathname, oflag [[, pmode]]);
char *pathname; path-имя файла
int oflag; доступный тип операций
int pmode; разрешенный тип доступа.
Описание.
Функция open открывает файл, определяемый по path-имени, и
подготавливает его к последующему чтению или записи, что опреде-
ляется посредством oflag.
Аргумент oflag является целым выражением, состоящим из ком-
бинации одной или более манифестных констант, объявленных в
<fcntl.h>. Если задана больше чем одна константа, тогда они объ-
единяются при помощи логического оператора ИЛИ (:).
OFLAG ЗНАЧЕНИЕ
O_APPEND Указатель на файл перемещен в конец
файла перед каждой операцией записи.
O_CREAT Новый файл создан и открыт для записи;
это не эффективно, если существует
файл, определяемый по path-имени.
O_EXCL Возвращается значение ошибки, если
существует файл, определяемый по path-
имени. Применяется только вместе с
O_CREATE.
O_RDONLY Файл открыт только для чтения; если
задается этот флаг, может быть выбран
либо флаг O_RDWR, либо O_WRONLY.
O_RDWR Файл открыт одновременно для чтения
и записи; если задается этот флаг,
может быть выбран либо флаг O_RDONLY,
либо O_WRONLY.
O_TRUNC Существующий файл открыт и усечен к
длине 0; этот файл должен иметь
разрешение на запись. Содержимое файла
уничтожается.
O_WRONLY Файл открыт только для чтения; если
задан этот флаг, должен быть задан
также либо флаг O_RDONLY, либо ORDWR.
O_BINARY Файл открыт в двоичном (не трансли-
рованном) режиме. (См. описание дво-
ичного режима у функции fopen).
O_TEXT Файл открыт в текстовом (трансли-
рующем) режиме. (См. описание тексто-
вого режима у функции fopen).
Замечание! O_TRUNC полностью уничтожает содержимое сущест-
вующего файла; поэтому нужно внимательно использовать эту конс-
танту.
Аргумент pmode требуется только тогда, когда определена
константа O_CREAT. Если файл существует, pmode игнорируется. В
противном случае pmode определяет разрешенные типы доступа для
файла, которые устанавливаются во время первого закрытия нового
файла.
Pmode - целое выражение, содержащее одну или обе манифест-
ные константы S_IREAD, S_IWRITE, объявленные в <sys\stat.h>. Когда
заданы обе константы, они объединяются логическим оператором ИЛИ
(:). Значение аргумента pmode приводится ниже.
КОНСТАНТА ЕЕ СМЫСЛОВОЕ ЗНАЧЕНИЕ
S_IWRITE разрешает запись.
S_IREAD разрешает чтение.
S_IREAD|S_IWRITE разрешают чтение и запись.
Если запись не разрешена, файл предназначен только для чте-
ния. В MS DOS все файлы открыты для чтения; для них не возможно
задать разрешение только на запись. Поэтому, модели S_IWRITE и
S_IREAD: S_IWRITE являются эквивалентными.
Функция open перед установкой разрешенного доступа прикла-
дывает текущую маску файла к pmode. (Подробно об этом описывается
у функции umask).
Возвращаемое значение.
Эта функция возвращает handle на созданный файл. Возвращае-
мое значение -1 указывает на ошибку; errno устанавливается в одно
из следующих значений.
ЗНАЧЕНИЕ ЕГО СМЫСЛ
EACCES Заданное path-имя является директорием;
или сделана попытка записать в файл,
открытый только для чтения, или
возникло sharing-нарушение. (Sharing-
режим файла для операций не допускается.
Версии MS DOS 3.0 и старше).
EEXIST Флаги O_CREAT и O_EXCL определены, но
названный файл всегда существует.
EMFILE Другие handle-ры файла не доступны, т.к.
много открытых файлов.
ENOENT Файл или path-имя не найдено.
См. также access, chmod, close, creat, dup, dup2, fopen,
sopen, umask.
Пример:
#include <fcntl.h>
#include <sys\types.h>
#include <sys\stat.h>
#include <io.h>
#include <stdlib.h>
main ()
{
int fh1, fh2;
fh1 = open("data1", O_RDONLY);
if (fh1 == -1)
perror("open failed on input file");
fh2 = open("data2", O_WRONLY:O_TRUNC:O_CREAT,
S_IREAD:S_IWRITE);
if (fh2 == -1)
perror("open failed on output file");
.
.
.
}.
fh1 = open("data1", O_RDONLY);
if (fh1 == -1)
perror("open failed on input file");.
