sopen

Функция            Открывает разделяемый файл.

Синтаксис          #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.

Смотрите также      chmod close creat lseek lock _open open
                    unlock unmask

Пример:

#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;
}