|
|
1.1 ! root 1: ! 2: ! 3: semop() COHERENT System Call semop() ! 4: ! 5: ! 6: ! 7: ! 8: Perform semaphore operations ! 9: ! 10: #include <sys/sem.h> ! 11: sseemmoopp(_s_e_m_i_d, _s_o_p_s, _n_s_o_p_s) ! 12: iinntt _s_e_m_i_d, _n_s_o_p_s; ssttrruucctt sseemmbbuuff(_s_o_p_s)[]; ! 13: ! 14: semop can atomically perform a number of operations on the set of ! 15: semaphores associated with the semaphore identifier semid. sops ! 16: pointer to the array of semaphore-operation structures. nsops is ! 17: the number of such structures in the array. Each structure in- ! 18: cludes the following members: ! 19: ! 20: ! 21: short sem_num; /* semaphore number */ ! 22: short sem_op; /* semaphore operation */ ! 23: short sem_flg; /* operation flags */ ! 24: ! 25: ! 26: Each semaphore operation specified by sem_op is performed on the ! 27: semaphore specified by semid and sem_num. ! 28: ! 29: sem_op specifies one of three semaphore operations, as follows: ! 30: ! 31: * If sem_op is negative, one of the following occurs: ! 32: ! 33: 11. If semval is greater than or equal to the absolute value of ! 34: sem_op, the absolute value of sem_op is subtracted from sem- ! 35: val. ! 36: ! 37: 22. If semval is less than the absolute value of sem_op and ! 38: (_s_e_m__f_l_g & IIPPCC_NNOOWWAAIITT) is true, semop sets errno to EGAIN and ! 39: returns -1. ! 40: ! 41: 33. If semval is less than the absolute value of sem_op and ! 42: (_s_e_m__f_l_g & IIPPCC_NNOOWWAAIITT) is false, semop increments the semncnt ! 43: associated with the specified semaphore and suspend execution ! 44: of the calling process until one of the following occurs: ! 45: ! 46: aa. semval becomes greater than or equal to the absolute value of ! 47: _s_e_m__o_p. When this occurs, the value of semncnt associated ! 48: with the specified semaphore is decremented, and the absolute ! 49: value of sem_op is subtracted from semval. ! 50: ! 51: bb. The semid for which the calling process is awaiting action is ! 52: removed from the system. ! 53: ! 54: cc. The calling process receives a signal. When this occurs, the ! 55: value of semncnt associated with the specified semaphore is ! 56: decremented, and the calling process resumes execution in the ! 57: manner prescribed in signal. ! 58: ! 59: * If sem_op is positive, the value of sem_op is added to semval. ! 60: ! 61: ! 62: ! 63: ! 64: COHERENT Lexicon Page 1 ! 65: ! 66: ! 67: ! 68: ! 69: semop() COHERENT System Call semop() ! 70: ! 71: ! 72: ! 73: * If sem_op is zero, one of the following occurs: ! 74: ! 75: 11. If semval is zero, semop returns immediately. ! 76: ! 77: 22. If semval does not equal zero and (_s_e_m__f_l_g & IIPPCC_NNOOWWAAIITT) is ! 78: true, semop immediately returns -1, with eerrrrnnoo set to EGAIN. ! 79: ! 80: 33. If semval is not equal to zero and (_s_e_m__f_l_g & IIPPCC_NNOOWWAAIITT) is ! 81: false, semop increments the semzcnt associated with the ! 82: specified semaphore and suspends execution of the calling ! 83: process until one of the following occurs: ! 84: ! 85: aa. semval becomes zero, at which time the value of semzcnt as- ! 86: sociated with the specified semaphore is decremented. ! 87: ! 88: bb. The semid for which the calling process is awaiting action is ! 89: removed from the system. ! 90: ! 91: cc. The calling process receives a signal. When this occurs, the ! 92: value of semzcnt associated with the specified semaphore is ! 93: decremented, and the calling process resumes execution in the ! 94: manner prescribed in signal. ! 95: ! 96: semop fails if one or more of the following are true for any of ! 97: the semaphore operations specified by sops: ! 98: ! 99: * semid is not a valid semaphore identifier. semop sets errno ! 100: to EINVAL ! 101: ! 102: * sem_num is less than zero or greater than or equal to the num- ! 103: ber of semaphores in the set associated with semid (EEFFBBIIGG). ! 104: ! 105: * nsops is greater than the system imposed maximum (EE22BBIIGG). ! 106: ! 107: * Operation permission is denied to the calling process ! 108: (EEAACCCCEESS). ! 109: ! 110: * The operation would result in suspension of the calling ! 111: process but (_s_e_m__f_l_g & IIPPCC_NNOOWWAAIITT) is true (EEAAGGAAIINN). ! 112: ! 113: * An operation would cause a semval to overflow the system im- ! 114: posed limit (EERRAANNGGEE). ! 115: ! 116: * sops points to an illegal address (EEFFAAUULLTT). ! 117: ! 118: Upon successful completion, the value of sempid for each ! 119: semaphore specified in the array pointed to by sops is set equal ! 120: to the process identifier of the calling process. ! 121: ! 122: ***** Return Value ***** ! 123: ! 124: If semop returns due to the receipt of a signal, it returns -1 to ! 125: the calling process and sets errno to EINTR. If it returns due ! 126: to the removal of a semid from the system, it returns -1 and sets ! 127: errno to EDOM. ! 128: ! 129: ! 130: COHERENT Lexicon Page 2 ! 131: ! 132: ! 133: ! 134: ! 135: semop() COHERENT System Call semop() ! 136: ! 137: ! 138: ! 139: ! 140: Upon successful completion, semop returns the value of semval at ! 141: the time of the call for the last operation in the array pointed ! 142: to by sops. Otherwise, it returns -1 and sets errno to an ap- ! 143: propriate value. ! 144: ! 145: ***** Files ***** ! 146: ! 147: /usr/include/sys/ipc.h ! 148: /usr/include/sys/sem.h ! 149: /dev/sem ! 150: /drv/sem ! 151: ! 152: ***** See Also ***** ! 153: ! 154: COHERENT system calls, sem, semctl(), semget() ! 155: ! 156: ***** Notes ***** ! 157: ! 158: The flag SEM_UNDO is not supported. This flag would allow ! 159: semaphore operations to be undone upon the termination of the ! 160: process which performed the operations. ! 161: ! 162: To improve portability, the COHERENT system implements semaphore ! 163: operations as a device driver rather than as an actual system ! 164: call. ! 165: ! 166: ! 167: ! 168: ! 169: ! 170: ! 171: ! 172: ! 173: ! 174: ! 175: ! 176: ! 177: ! 178: ! 179: ! 180: ! 181: ! 182: ! 183: ! 184: ! 185: ! 186: ! 187: ! 188: ! 189: ! 190: ! 191: ! 192: ! 193: ! 194: ! 195: ! 196: COHERENT Lexicon Page 3 ! 197: ! 198:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.