此函式有三個或四個引數,具體取決於 cmd。當有四個引數時,第四個引數的型別為 union semun。呼叫程式必須按如下方式定義此聯合體
union semun {
int val; /* Value for SETVAL */
struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */
unsigned short *array; /* Array for GETALL, SETALL */
struct seminfo *__buf; /* Buffer for IPC_INFO
(Linux specific) */
};
semid_ds 資料結構在 <sys/sem.h> 中定義如下
struct semid_ds {
struct ipc_perm sem_perm; /* Ownership and permissions
time_t sem_otime; /* Last semop time */
time_t sem_ctime; /* Last change time */
unsigned short sem_nsems; /* No. of semaphores in set */
};
struct seminfo {
int semmap; /* # of entries in semaphore map;
unused */
int semmni; /* Max. # of semaphore sets */
int semmns; /* Max. # of semaphores in all
semaphore sets */
int semmnu; /* System-wide max. # of undo
structures; unused */
int semmsl; /* Max. # of semaphores in a set */
int semopm; /* Max. # of operations for semop() */
int semume; /* Max. # of undo entries per
process; unused */
int semusz; /* size of struct sem_undo */
int semvmx; /* Maximum semaphore value */
int semaem; /* Max. value that can be recorded for
semaphore adjustment (SEM_UNDO) */
};