|
|
Power 6/32 Unix version 1.2b
/* @(#)sem.h 6.1 */
/*
** IPC Semaphore Facility.
*/
/*
** Implementation Constants.
*/
#define PSEMN (PZERO + 3) /* sleep priority waiting for greater value */
#define PSEMZ (PZERO + 2) /* sleep priority waiting for zero */
/*
** Permission Definitions.
*/
#define SEM_A 0x0080 /* alter permission */
#define SEM_R 0x0100 /* read permission */
/*
** Semaphore Operation Flags.
*/
#define SEM_UNDO 0x1000 /* set up adjust on exit entry */
/*
** Semctl Command Definitions.
*/
#define GETNCNT 3 /* get semncnt */
#define GETPID 4 /* get sempid */
#define GETVAL 5 /* get semval */
#define GETALL 6 /* get all semval's */
#define GETZCNT 7 /* get semzcnt */
#define SETVAL 8 /* set semval */
#define SETALL 9 /* set all semval's */
/* Defines for Semaphore Limits */
#define SEMMAP 10 /* # of entries in semaphore map */
#define SEMMNI 10 /* # of semaphore identifiers */
#define SEMMNS 60 /* # of semaphores in system */
#define SEMMNU 30 /* # of undo structures in system */
#define SEMMSL 25 /* max # of semaphores per id */
#define SEMOPM 10 /* max # of operations per semop call */
#define SEMUME 10 /* max # of undo entries per process */
#define SEMVMX 32767 /* semaphore maximum value */
#define SEMAEM 16384 /* adjust on exit max value */
/*
** Structure Definitions.
*/
/*
** There is one semaphore id data structure for each set of semaphores
** in the system.
*/
struct semid_ds {
struct ipc_perm sem_perm; /* operation permission struct */
struct sem *sem_base; /* ptr to first semaphore in set */
u_short sem_nsems; /* # of semaphores in set */
time_t sem_otime; /* last semop time */
time_t sem_ctime; /* last change time */
};
/*
** There is one semaphore structure for each semaphore in the system.
*/
struct sem {
u_short semval; /* semaphore text map address */
short sempid; /* pid of last operation */
u_short semncnt; /* # awaiting semval > cval */
u_short semzcnt; /* # awaiting semval = 0 */
};
/*
** There is one undo structure per process in the system.
*/
struct sem_undo {
struct sem_undo *un_np; /* ptr to next active undo structure */
short un_cnt; /* # of active entries */
struct undo {
short un_aoe; /* adjust on exit values */
short un_num; /* semaphore # */
int un_id; /* semid */
} un_ent[1]; /* undo entries (one minimum) */
};
#define SEMUSZ (sizeof(struct sem_undo)+sizeof(struct undo)*SEMUME)
/*
** semaphore information structure
*/
struct seminfo {
int semmap, /* # of entries in semaphore map */
semmni, /* # of semaphore identifiers */
semmns, /* # of semaphores in system */
semmnu, /* # of undo structures in system */
semmsl, /* max # of semaphores per id */
semopm, /* max # of operations per semop call */
semume, /* max # of undo entries per process */
semusz, /* size in bytes of undo structure */
semvmx, /* semaphore maximum value */
semaem; /* adjust on exit max value */
};
/*
** User semaphore template for semop system calls.
*/
struct sembuf {
u_short sem_num; /* semaphore # */
short sem_op; /* semaphore operation */
short sem_flg; /* operation flags */
};
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.