|
|
1.1 root 1: /* @(#)sem.h 6.1 */
2: /*
3: ** IPC Semaphore Facility.
4: */
5:
6: /*
7: ** Implementation Constants.
8: */
9:
10: #define PSEMN (PZERO + 3) /* sleep priority waiting for greater value */
11: #define PSEMZ (PZERO + 2) /* sleep priority waiting for zero */
12:
13: /*
14: ** Permission Definitions.
15: */
16:
17: #define SEM_A 0x0080 /* alter permission */
18: #define SEM_R 0x0100 /* read permission */
19:
20: /*
21: ** Semaphore Operation Flags.
22: */
23:
24: #define SEM_UNDO 0x1000 /* set up adjust on exit entry */
25:
26: /*
27: ** Semctl Command Definitions.
28: */
29:
30: #define GETNCNT 3 /* get semncnt */
31: #define GETPID 4 /* get sempid */
32: #define GETVAL 5 /* get semval */
33: #define GETALL 6 /* get all semval's */
34: #define GETZCNT 7 /* get semzcnt */
35: #define SETVAL 8 /* set semval */
36: #define SETALL 9 /* set all semval's */
37:
38:
39: /* Defines for Semaphore Limits */
40:
41: #define SEMMAP 10 /* # of entries in semaphore map */
42: #define SEMMNI 10 /* # of semaphore identifiers */
43: #define SEMMNS 60 /* # of semaphores in system */
44: #define SEMMNU 30 /* # of undo structures in system */
45: #define SEMMSL 25 /* max # of semaphores per id */
46: #define SEMOPM 10 /* max # of operations per semop call */
47: #define SEMUME 10 /* max # of undo entries per process */
48: #define SEMVMX 32767 /* semaphore maximum value */
49: #define SEMAEM 16384 /* adjust on exit max value */
50:
51: /*
52: ** Structure Definitions.
53: */
54:
55: /*
56: ** There is one semaphore id data structure for each set of semaphores
57: ** in the system.
58: */
59:
60: struct semid_ds {
61: struct ipc_perm sem_perm; /* operation permission struct */
62: struct sem *sem_base; /* ptr to first semaphore in set */
63: u_short sem_nsems; /* # of semaphores in set */
64: time_t sem_otime; /* last semop time */
65: time_t sem_ctime; /* last change time */
66: };
67:
68: /*
69: ** There is one semaphore structure for each semaphore in the system.
70: */
71:
72: struct sem {
73: u_short semval; /* semaphore text map address */
74: short sempid; /* pid of last operation */
75: u_short semncnt; /* # awaiting semval > cval */
76: u_short semzcnt; /* # awaiting semval = 0 */
77: };
78:
79: /*
80: ** There is one undo structure per process in the system.
81: */
82:
83: struct sem_undo {
84: struct sem_undo *un_np; /* ptr to next active undo structure */
85: short un_cnt; /* # of active entries */
86: struct undo {
87: short un_aoe; /* adjust on exit values */
88: short un_num; /* semaphore # */
89: int un_id; /* semid */
90: } un_ent[1]; /* undo entries (one minimum) */
91: };
92:
93: #define SEMUSZ (sizeof(struct sem_undo)+sizeof(struct undo)*SEMUME)
94:
95: /*
96: ** semaphore information structure
97: */
98: struct seminfo {
99: int semmap, /* # of entries in semaphore map */
100: semmni, /* # of semaphore identifiers */
101: semmns, /* # of semaphores in system */
102: semmnu, /* # of undo structures in system */
103: semmsl, /* max # of semaphores per id */
104: semopm, /* max # of operations per semop call */
105: semume, /* max # of undo entries per process */
106: semusz, /* size in bytes of undo structure */
107: semvmx, /* semaphore maximum value */
108: semaem; /* adjust on exit max value */
109: };
110:
111: /*
112: ** User semaphore template for semop system calls.
113: */
114:
115: struct sembuf {
116: u_short sem_num; /* semaphore # */
117: short sem_op; /* semaphore operation */
118: short sem_flg; /* operation flags */
119: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.