Функция Открывает разделяемый файл.
Синтаксис #include
#include
#include
#include
int sopen(char *path, int access, int shflag,
int mode);
Файл, содержащий io.h
прототип
Описание Функция sopen открывает файл, имя которого опреде-
лено параметром path, и подготавливает его к пос-
ледующим разделяемым операциям чтения и/или запи-
си, в зависимости от параметров access, shflag и
mode.
sopen это макро, определенное следующим образом:
open(path, (access) | (shflag), mode)
Для функции sopen параметр access конструируется
путем логического побитового сложения флагов, пе-
речисленных в двух следующих списках. Из первого
списка может быть использован только один флаг;
остальные флаги могут применяться в любых логи-
ческих комбинациях.
Список 1: флаги чтения/записи.
O_RDONLY открытие только для чтения.
O_WRONLY открытие только для записи.
O_RDWR открытие для чтения и записи.
Список 2: остальные флаги доступа.
O_NDELAY Не используется; для совместимости с
системой UNIX.
O_APPEND Если флажок установлен, то перед каждой
операцией записи, указатель файла бу-
дет устанавливаться на конец файла.
O_CREAT Если файл существует, этот флажок не
имеет никакого значения. Если файл не
существует, он будет создан, и биты из
аргумента mode будут использованы
для установки битов-атрибутов файла,
как и в функции chmod.
O_TRUNC Если файл существует, его длина усека-
ется до 0. Атрибуты файла остаются не-
изменными.
O_EXCL Используется только вместе с O_CREAT.
Если файл уже существует, то происходит
возврат по ошибке.
O_BINARY Данный флаг может быть установлен для
гарантированного открытия файла в
двоичном режиме.
O_TEXT Данный флаг может быть установлен для
гарантированного открытия файла в текс-
товом режиме.
Эти константы (O_...) определены в файле fcntl.h.
Если ни O_BINARY, ни O_TEXT не указаны, файл отк-
рывается в режиме трансляции, соответственно гло-
бальной переменной _fmode.
Если в построении параметра access участвует флаг
O_CREAT, вам необходимо указать аргумент mode из
следующих символических констант, определенных в
файле sys\stat.h.
--------------------------------------------------
Значение параметра Возможности доступа
mode
--------------------------------------------------
S_IWRITE Разрешение на запись.
S_IREAD Разрешение на чтение.
S_IREAD/S_IWRITE Разрешение на чтение/запись.
--------------------------------------------------
shflag определяет тип разделения файла, определя-
емого параметром path. Символические константы
для shflag определены в файле share.h.
--------------------------------------------------
Значение shflag Что он делает
--------------------------------------------------
SH_COMPAT Устанавливает режим совместимос-
ти
SH_DENYRW Запрещает доступ для чтения и
записи
SH_DENYWR Запрещает доступ для записи
SH_DENYRD Запрещает доступ для чтения
SH_DENYNONE Разрешает доступ для чтения и
записи
SH_DENYNO Разрешает доступ для чтения и
записи
--------------------------------------------------
Возвращаемое При успешном завершении sopen возвращает целое
значение неотрицательное число handle - логический номер
открытого файла. Указатель файла (указатель теку-
щей позиции) устанавливается на начало файла. При
ошибке функция возвращает значение -1, и перемен-
ная errno получает одно из следующих значений:
ENOENT - Маршрут или имя файла не найдены;
EMFILE - Слишком много открытых файлов;
EACCES - Доступ запрещен;
EINVACC - Неверный код доступа.
Переносимость Функция sopen поддерживается на системах UNIX.
На версии 7 системы UNIX мнемоника O_тип не опре-
делена. Система UNIX SYSTEM 3 пользуется всеми
мнемониками O_тип за исключением O_BINARY.
Смотрите также chmodclosecreatlseeklock_openopenunlockunmask
Пример:
#include
#include
#include
#include
#include
#include
int main(void)
{
int handle;
int status;
handle = sopen("c:\\autoexec.bat",O_RDONLY,SH_DENYNO,S_IREAD);
if(!handle)
{
printf("Ошибка sopen\n");
exit(1);
}
status = access("c:\\autoexec.bat",6);
if(status == 0)
printf("Разрешены чтение/запись\n");
else
printf("Чтение/запись запрещены\n");
close(handle);
return 0;
}