source: branches/libc-0.6/src/emx/include/sys/sem.h

Last change on this file was 1987, checked in by bird, 20 years ago

shm + sem debuging.

  • Property cvs2svn:cvs-rev set to 1.4
  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 4.1 KB
Line 
1/* $FreeBSD: src/sys/sys/sem.h,v 1.27 2003/06/02 17:23:37 schweikh Exp $ */
2/* $NetBSD: sem.h,v 1.5 1994/06/29 06:45:15 cgd Exp $ */
3
4/*
5 * SVID compatible sem.h file
6 *
7 * Author: Daniel Boulet
8 */
9
10/** @file
11 * FreeBSD 5.3
12 * @changed bird: no padding in semid_ds. seminfo and semexit are static in our 'kernel'.
13 * @changed bird: added time_t, size_t and pid_t as per POSIX.
14 */
15
16#ifndef _SYS_SEM_H_
17#define _SYS_SEM_H_
18
19#include <sys/ipc.h>
20#include <sys/_types.h>
21
22#if !defined(_TIME_T_DECLARED) && !defined(_TIME_T) /* bird: EMX */
23typedef __time_t time_t;
24#define _TIME_T_DECLARED
25#define _TIME_T /* bird: EMX */
26#endif
27
28#include <sys/_types.h>
29#if !defined(_SIZE_T_DECLARED) && !defined(_SIZE_T) /* bird: emx */
30typedef __size_t size_t;
31#define _SIZE_T_DECLARED
32#define _SIZE_T /* bird: emx */
33#endif
34
35#if !defined(_PID_T_DECLARED) && !defined(_PID_T) /* bird:emx */
36typedef __pid_t pid_t; /* process id */
37#define _PID_T_DECLARED
38#define _PID_T /* bird: emx */
39#endif
40
41
42struct sem;
43
44struct semid_ds {
45 struct ipc_perm sem_perm; /* operation permission struct */
46 struct sem *sem_base; /* pointer to first semaphore in set */
47 unsigned short sem_nsems; /* number of sems in set */
48 time_t sem_otime; /* last operation time */
49#ifndef __EMX__ /* space is precious */
50 long sem_pad1; /* SVABI/386 says I need this here */
51#endif
52 time_t sem_ctime; /* last change time */
53 /* Times measured in secs since */
54 /* 00:00:00 GMT, Jan. 1, 1970 */
55#ifndef __EMX__ /* space is precious */
56 long sem_pad2; /* SVABI/386 says I need this here */
57 long sem_pad3[4]; /* SVABI/386 says I need this here */
58#endif
59};
60
61/*
62 * semop's sops parameter structure
63 */
64struct sembuf {
65 unsigned short sem_num; /* semaphore # */
66 short sem_op; /* semaphore operation */
67 short sem_flg; /* operation flags */
68};
69#define SEM_UNDO 010000
70
71/*
72 * semctl's arg parameter structure
73 */
74union semun {
75 int val; /* value for SETVAL */
76 struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */
77 unsigned short *array; /* array for GETALL & SETALL */
78};
79
80/*
81 * commands for semctl
82 */
83#define GETNCNT 3 /* Return the value of semncnt {READ} */
84#define GETPID 4 /* Return the value of sempid {READ} */
85#define GETVAL 5 /* Return the value of semval {READ} */
86#define GETALL 6 /* Return semvals into arg.array {READ} */
87#define GETZCNT 7 /* Return the value of semzcnt {READ} */
88#define SETVAL 8 /* Set the value of semval to arg.val {ALTER} */
89#define SETALL 9 /* Set semvals from arg.array {ALTER} */
90#define SEM_STAT 10 /* Like IPC_STAT but treats semid as sema-index */
91#define SEM_INFO 11 /* Like IPC_INFO but treats semid as sema-index */
92
93/*
94 * Permissions
95 */
96#define SEM_A IPC_W /* alter permission */
97#define SEM_R IPC_R /* read permission */
98
99#ifdef _KERNEL
100
101/*
102 * semaphore info struct
103 */
104struct seminfo {
105 int semmap, /* # of entries in semaphore map */
106 semmni, /* # of semaphore identifiers */
107 semmns, /* # of semaphores in system */
108 semmnu, /* # of undo structures in system */
109 semmsl, /* max # of semaphores per id */
110 semopm, /* max # of operations per semop call */
111 semume, /* max # of undo entries per process */
112 semusz, /* size in bytes of undo structure */
113 semvmx, /* semaphore maximum value */
114 semaem; /* adjust on exit max value */
115};
116#ifndef __EMX__
117extern struct seminfo seminfo;
118#endif
119
120/* internal "mode" bits */
121#define SEM_ALLOC 01000 /* semaphore is allocated */
122#define SEM_DEST 02000 /* semaphore will be destroyed on last detach */
123
124#ifndef __EMX__
125/*
126 * Process sem_undo vectors at proc exit.
127 */
128void semexit(struct proc *p);
129#endif /* !__EMX__ */
130#endif /* _KERNEL */
131
132#ifndef _KERNEL
133#include <sys/cdefs.h>
134#include <sys/_types.h>
135
136#ifndef _SIZE_T_DECLARED
137typedef __size_t size_t;
138#define _SIZE_T_DECLARED
139#endif
140
141#ifndef _PID_T_DECLARED
142typedef __pid_t pid_t;
143#define _PID_T_DECLARED
144#endif
145
146__BEGIN_DECLS
147#ifndef __EMX__
148int semsys(int, ...);
149#endif
150int semctl(int, int, int, ...);
151int semget(key_t, int, int);
152int semop(int, struct sembuf *, size_t);
153__END_DECLS
154#endif /* !_KERNEL */
155
156#endif /* !_SYS_SEM_H_ */
Note: See TracBrowser for help on using the repository browser.