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