You need to sign in or sign up before continuing.
sem.h 1.4 KB
Newer Older
R
Rich Felker 已提交
1 2 3 4 5 6
#ifndef _SYS_SEM_H
#define _SYS_SEM_H
#ifdef __cplusplus
extern "C" {
#endif

7 8
#include <features.h>

R
Rich Felker 已提交
9
#define __NEED_size_t
R
Rich Felker 已提交
10 11 12 13 14
#define __NEED_pid_t
#define __NEED_time_t
#ifdef _GNU_SOURCE
#define __NEED_struct_timespec
#endif
R
Rich Felker 已提交
15 16 17 18 19 20 21 22 23 24 25 26 27
#include <bits/alltypes.h>

#include <sys/ipc.h>

#define SEM_UNDO	0x1000
#define GETPID		11
#define GETVAL		12
#define GETALL		13
#define GETNCNT		14
#define GETZCNT		15
#define SETVAL		16
#define SETALL		17

28 29
#include <endian.h>

R
Rich Felker 已提交
30 31 32 33 34 35
struct semid_ds {
	struct ipc_perm sem_perm;
	long sem_otime;
	unsigned long __unused1;
	long sem_ctime;
	unsigned long __unused2;
36 37 38 39 40 41 42
#if __BYTE_ORDER == __LITTLE_ENDIAN
	unsigned short sem_nsems;
	char __sem_nsems_pad[sizeof(long)-sizeof(short)];
#else
	char __sem_nsems_pad[sizeof(long)-sizeof(short)];
	unsigned short sem_nsems;
#endif
R
Rich Felker 已提交
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
	unsigned long __unused3;
	unsigned long __unused4;
};

#define _SEM_SEMUN_UNDEFINED 1

#define SEM_STAT 18
#define SEM_INFO 19

struct  seminfo {
	int semmap;
	int semmni;
	int semmns;
	int semmnu;
	int semmsl;
	int semopm;
	int semume;
	int semusz;
	int semvmx;
	int semaem;
};

struct sembuf {
	unsigned short sem_num;
	short sem_op;
	short sem_flg;
};

int semctl(int, int, int, ...);
int semget(key_t, int, int);
int semop(int, struct sembuf *, size_t);

#ifdef _GNU_SOURCE
int semtimedop(int, struct sembuf *, size_t, const struct timespec *);
#endif

#ifdef __cplusplus
}
#endif
#endif