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");.