mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

SEMCTL(2)                                             SEMCTL(2)

НАЗВАНИЕ 
        semctl - операции управления семафорами

СИНТАКСИС 
        #include 
        #include 
        #include 
        
        int semctl (semid, semnum, cmd, arg)
        int semid, cmd;
        int semnum;
        union semun {
          int val;
          struct semid_ds *buf;
          ushort *array;
        } arg;

ОПИСАНИЕ 
        Системный вызов semctl позволяет выполнять операции уп-
        равления  семафорами.  Семафоры  задаются   аргументами
        semid и semnum. Операция определяется  значением  аргу-
        мента cmd, которое должно быть одним из следующих:

        GETVAL 
             Получить значение семафора semval [см.  intro(2)].
             {Требуется право на чтение.}

        SETVAL 
             Установить   значение   семафора   semval   равным
             arg.val. {Требуется право на изменение.} После ус-
             пешного выполнения этой команды  значение  semadj,
             соответствующее заданному семафору во всех процес-
             сах, устанавливается равным 0.

        GETPID 
             Получить значение sempid. {Требуется право на чте-
             ние.}

        GETNCNT 
             Получить значение  semncnt.  {Требуется  право  на
             чтение.}

        GETZCNT 
             Получить значение  semzcnt.  {Требуется  право  на
             чтение.}

        Следующие команды cmd читают и  устанавливают  значение
        каждого семафора в множестве семафоров:

        GETALL 
             Прочитать значения семафоров в массив, на  который
             указывает arg.array. {Требуется право на чтение.}

        SETALL 
             Установить значения  семафоров  равными  значениям
             элементов массива, на который указывает arg.array.
             {Требуется право на  изменение.}  После  успешного
             выполнения этой  команды  значения  semadj,  соот-
             ветствующие заданным семафорам во всех  процессах,
             устанавливаются равными 0.

        Предоставляются также следующие команды:

        IPC_STAT 
             Поместить текущее значение каждого поля  структуры
             данных, ассоциированной с идентификатором semid, в
             структуру, на которую указывает arg.buf.  Содержи-
             мое этой структуры определяется в intro(2).  {Тре-
             буется право на чтение.}

        IPC_SET 
             Присвоить следующим полям структуры данных,  ассо-
             циированной с идентификатором semid, соответствую-
             щие значения, находящиеся в структуре, на  которую
             указывает arg.buf:

                sem_perm.uid
                sem_perm.gid
                sem_perm.mode  /* Только младшие 9 бит */

             Эта команда может  выполняться  только  процессом,
             который имеет действующий идентификатор  пользова-
             теля, равный либо идентификатору  суперпользовате-
             ля,   либо   значению   поля   sem_perm.cuid   или
             sem_perm.uid в структуре данных, ассоциированной с
             идентификатором semid.

        IPC_RMID 
             Удалить из системы идентификатор семафора, опреде-
             ляемый значением  semid,  ликвидировать  множество
             семафоров и ассоциированную с ним  структуру  дан-
             ных. Эта команда может выполняться только  процес-
             сом, который имеет действующий идентификатор поль-
             зователя, равный либо идентификатору  суперпользо-
             вателя,  либо  значению  поля  sem_perm.cuid   или
             sem_perm.uid в структуре данных, ассоциированной с
             идентификатором semid.

        Системный вызов semctl завершается неудачей,  если  вы-
        полнено хотя бы одно из следующих условий:

        [EINVAL]    Значение аргумента semid не  является  кор-
                    ректным идентификатором  множества  семафо-
                    ров.

        [EINVAL]    Номер семафора semnum меньше 0 или превыша-
                    ет значение sem_nsems.

        [EINVAL]    Некорректное значение аргумента cmd,  опре-
                    деляющее команду.

        [EACCES]    Нет прав на выполнение операции у  вызываю-
                    щего процесса.

        [ERANGE]    Значение аргумента  cmd  равно  SETVAL  или
                    SETALL и  значение,  которое  присваивается
                    семафору, больше максимально допустимого  в
                    системе.

        [EPERM]     Значение аргумента cmd равно  IPC_RMID  или
                    IPC_SET и действующий идентификатор пользо-
                    вателя вызывающего  процесса  не  равен  ни
                    идентификатору суперпользователя, ни значе-
                    нию поля sem_perm.cuid или  sem_perm.uid  в
                    структуре данных, ассоциированной с иденти-
                    фикатором semid.

        [EFAULT]    Значение arg.buf указывает за пределы отве-
                    денного процессу адресного пространства.

СМ. ТАКЖЕ 
        intro(2), semget(2), semop(2).

ДИАГНОСТИКА 
        При успешном завершении системного вызова  возвращаются
        следующие значения, в зависимости от команды cmd:

        GETVAL      Значение семафора semval.

        GETPID      Идентификатор процесса sempid.

        GETNCNT     Значение semncnt.

        GETZCNT     Значение semzcnt.

        Результат успешного выполнения остальных операций равен
        0.

        В случае ошибки возвращается  -1,  а  переменной  errno
        присваивается код ошибки.



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк