Por exemplo, a estrutura sembuf é usada como argumento para as operações envolvendo a primitiva semop(), tem a seguinte forma:
struct sembuf
{
short int sem_num; /* número do semáforo */
short int sem_op; /* operação no semáforo */
short int sem_flg; /* flag da operação */
};
A estrutura de dados do conjunto de semáforos é a seguinte:
struct semid_ds
{
struct ipc_perm sem_perm; /* operation permission struct */
__time_t sem_otime; /* last semop() time */
__time_t sem_ctime; /* last time changed by semctl() */
struct sem *__sembase; /* ptr to first semaphore in array */
struct sem_queue *__sem_pending; /* pending operations */
struct sem_queue *__sem_pending_last; /* last pending operation */
struct sem_undo *__undo; /* ondo requests on this array */
unsigned short int sem_nsems; /* number of semaphores in set */
};
A estrutura de dados usada para passar as informações sobre as permissões de acesso para as operações IPC é mostrada a seguir:
struct ipc_perm
{
__key_t __key; /* Key. */
unsigned short int uid; /* Owner's user ID. */
unsigned short int gid; /* Owner's group ID. */
unsigned short int cuid; /* Creator's user ID. */
unsigned short int cgid; /* Creator's group ID. */
unsigned short int mode; /* Read/write permission. */
unsigned short int __seq; /* Sequence number. */
};