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