|
|
1.1 ! root 1: /* ! 2: * User Semaphore Functions. ! 3: * ! 4: * Note: Semget() must be first function called. ! 5: * ! 6: * $Log:$ ! 7: * 87/04/26 Allan Cornish ! 8: * Support for 32 bit 'key' added to semget. ! 9: */ ! 10: ! 11: #include <sys/sem.h> ! 12: ! 13: static int semfno = -1; ! 14: static char semdev[] = "/dev/sem"; ! 15: ! 16: /* ! 17: * Semaphore Control Operations. ! 18: */ ! 19: ! 20: semctl( semid, semnum, cmd, arg ) ! 21: ! 22: int semid; ! 23: int semnum; ! 24: int cmd; ! 25: int arg; ! 26: ! 27: { ! 28: int parm[5]; ! 29: ! 30: if ( semfno < 0 ) ! 31: return -1; ! 32: ! 33: parm[0] = -1; ! 34: parm[1] = semid; ! 35: parm[2] = semnum; ! 36: parm[3] = cmd; ! 37: parm[4] = arg; ! 38: ! 39: ioctl( semfno, SEMCTL, parm ); ! 40: return parm[0]; ! 41: } ! 42: ! 43: /* ! 44: * Get Set of Semaphores. ! 45: */ ! 46: ! 47: semget( key, nsems, semflg ) ! 48: ! 49: key_t key; ! 50: int nsems; ! 51: int semflg; ! 52: ! 53: { ! 54: int parm[5]; ! 55: ! 56: if ( semfno < 0 ) { ! 57: ! 58: if ( (semfno = open(semdev, 0)) < 0 ) { ! 59: ! 60: perror( semdev ); ! 61: return -1; ! 62: } ! 63: } ! 64: ! 65: parm[0] = -1; ! 66: parm[1] = key; ! 67: parm[2] = key >> 16; ! 68: parm[3] = nsems; ! 69: parm[4] = semflg; ! 70: ! 71: ioctl( semfno, SEMGET, parm ); ! 72: return parm[0]; ! 73: } ! 74: ! 75: /* ! 76: * Semaphore Operations. ! 77: */ ! 78: ! 79: semop( semid, sops, nsops ) ! 80: ! 81: int semid; ! 82: struct sembuf (*sops)[]; ! 83: int nsops; ! 84: ! 85: { ! 86: int parm[4]; ! 87: ! 88: if ( semfno < 0 ) ! 89: return -1; ! 90: ! 91: parm[0] = -1; ! 92: parm[1] = semid; ! 93: parm[2] = sops; ! 94: parm[3] = nsops; ! 95: ! 96: ioctl( semfno, SEMOP, parm ); ! 97: return parm[0]; ! 98: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.