|
|
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.