Вы здесь

SystemV IPC

Утилиты командной строки

Просмотр информации о подсистеме SysV IPC

lsipc

Создание объекта

ipcmk -Q  # -Q queue, -M size - shmem -S number - semaphore

Просмотр объектов

ipcs

Удаление объектов

ipcrm

Пространство имён

Для формирование используются две составляющие: файл в файловой системе (точнее номер его Inode) и целое число. При выборе файла, для формирования имени, необходимо обеспечить достаточную длительность его жизни. Если файл удалён, то новые процессы не смогут получить доступ к объектам IPC , в имени которых использовался данный файл. Удаление файла и создание нового с тем же именем так же нарушит доступ к объектам IPC поскольку новый файл будет иметь отличный номер Inode.

   #include <sys/types.h>
   #include <sys/ipc.h>

   key_t ftok(const char *pathname, int proj_id);

Права доступа и операции

При создании используются флаги

   IPC_CREAT     Create entry if key doesn't exist.
   IPC_EXCL      Fail if key exists.
   IPC_PRIVATE   Private key.

и права доступа. Права доступа аналогичны файлам (mode - rwxrwxrwx)

Управление объектами SysV IPC (в том числе их уничтожение) ведется c помощью функций msgctl, semctl, shmctl. Параметр cmd этих функций может принимать значения:

   IPC_RMID      Remove resource.
   IPC_SET       Set resource options.
   IPC_STAT      Get resource options.

Дополнительный флаг

   IPC_NOWAIT    Error if request must wait.

MSG

Очередь сообщений

   #include <sys/types.h>
   #include <sys/ipc.h>
   #include <sys/msg.h>

   int msgget(key_t key, int msgflg);
   int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
   ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,
                  int msgflg);

   struct msgbuf {
           long mtype;       /* message type, must be > 0 */
           char mtext[1];    /* message data */
   };

   int msgctl(int msqid, int cmd, struct msqid_ds *buf);

SEM

Семафоры

   #include <sys/types.h>
   #include <sys/ipc.h>
   #include <sys/sem.h>

   int semget(key_t key, int nsems, int semflg);
   int semop(int semid, struct sembuf *sops, unsigned nsops);

struct sembuf {
      unsigned short sem_num;  /* semaphore number */
       short          sem_op;   /* semaphore operation */
       short          sem_flg;  /* operation flags */
}

int semctl(int semid, int semnum, int cmd, ...);

SHMEM

Общая память

   #include <sys/ipc.h>
   #include <sys/shm.h>

   int shmget(key_t key, size_t size, int shmflg);
   void *shmat(int shmid, const void *shmaddr, int shmflg);
   int shmdt(const void *shmaddr);
   int shmctl(int shmid, int cmd, struct shmid_ds *buf);
Яндекс.Метрика