Описание функций C (Си) / C++ - sopen

Описание функций C (Си) / C++ - sopen


#include
#include
#include
#include
#include требуется только для объявления
функции

int sopen(pathname,oflag,shflag{,pmode]);
char *pathname; path-имя файла
int oflag; тип разрешенных операций
int shflag; разрешенный тип разделения
int pmode; разрешенный тип доступа

Описание.

Функция sopen открывает файл, заданный по path-имени, и
подготавливает его к последующему разделенному чтению или записи,
что определяется значением oflag или shflag. Oflag является целым
выражением, состоящим из комбинации одной или нескольких следую-
щих манифестных констант, объявленных в . Когда задана
более чем одна манифестная константа, тогда они объединяются при
помощи оператора ИЛИ(:).

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 или O_RDWR.

O_BINARY Файл открыт в двоичном (не транслиро-
ванном) режиме. (См. описание двоич-
ного режима у функции fopen).

O_TEXT Файл открыт в текстовом (транслирован-
ном) режиме. (См. описание тексто-
вого режима у функции fopen).

Замечание: O_TRUNC полностью уничтожает содержимое сущест-
вующего файла, поэтому нужно внимательно использовать эту конс-
танту.
Аргумент shflag является константным выражением, состоящим
из следующих манифестных констант, объявленных в . Под-
робно информация о режиме разделения приведена в
руководстве по MS DOS.

shflag Значение

SH_COMPAT устанавливается режим совместимости

SH_DENYRW доступ по чтению и записи в файле не
разрешен

SH_DENYWR доступ по записи в файле не разрешен

SH_DENYRD доступ по чтению в файле не разрешен

SH_DENYNO доступ по чтению и записи разрешен


Аргумент pmode требуется только тогда, когда определена
константа 0_CREAT. Если файл не существует, pmode также определя-
ет типы доступа для файла, которые устанавливаются во время пер-
вого закрытия нового файла. В противном случае аргумент pmode иг-
норируется. Аргумент pmode является целым выражением, содержащим
одну или больше манифестных констант S_IWRITE и S_IREAD, объяв-
ленных в . Когда задаются обе константы, они объединя-
ются оператором ИЛИ(!). Значение аргумента pmode приведено ниже.

КОНСТАНТА ЕЕ СМЫСЛОВОЕ ЗНАЧЕНИЕ

S_IWRITE разрешает запись

S_IREAD разрешает чтение


S_IREAD:S_IWRITE разрешают чтение и запись

Если запись не разрешена, файл предназначен только для чте-
ния. В MS DOS все файлы открыты для чтения, разрешение по записи
не задается. Поэтому модели S_IWRITE и S_IREAD: S_IWRITE являются
эквивалентными.
Перед установкой разрешения функция sopen прикладывает те-
кущую маску файла к pmode (см. umask).

Возвращаемое значение.

Функция sopen возвращает handle-р на открытый файл. Возвра-
щаемое значение -1 указывает на ошибку; errno устанавливается в
одно из следующих значений:

ЗНАЧЕНИЕ ЕГО СМЫСЛ

EACCES Заданное path-имя является директорием
или сделана попытка записать в файл,
открытый только для чтения, или
возникло нарушение в режиме разделения.
(Версии MS DOS 3.0 и старше).

EINVAL Командный файл SHARE.COM не инстоллиро-
ван.

EEXIST Флаги O_CREAT и O_EXCL определены, но
названный файл всегда существует.

EMFILE Другие handle-ры файла не доступны,
т.к. много открытых файлов.

ENOENT Файл или path-имя не найдено.

См.также close, create, fopen, open, umask.

Замечание: Функция sopen используется в версиях 3.0 MS DOS
и старших. В ранних версиях MS DOS аргумент shflag игнорируется.
Режимы разделения файлов работают неверно с буферизованными
файлами, поэтому fdopen не используется для связи потока и файла,
открытого к разделению или закрытию.

Пример:

#include
#include
#include
#include
#include

extern unsigned char _osmajor;
int fh;


/* Перед вызовом sopen используется переменная _osmajor для

проверки номера версии MS DOS . */.

if (_osmajor >=3)
fh = sopen ("data", O_RDWR:O_BINARY, SH_DENYRW);

else
fh = open ("data", O_RDWR: O_BINARY);






Опубликовал admin
11 Мар, Вторник 2008г.



Программирование для чайников.