55 lines
1.3 KiB
C
55 lines
1.3 KiB
C
#ifndef _SYS_SEM_H
|
|
#define _SYS_SEM_H 1
|
|
|
|
// https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_sem.h.html
|
|
|
|
#include <sys/cdefs.h>
|
|
|
|
__BEGIN_DECLS
|
|
|
|
#define __need_pid_t
|
|
#define __need_size_t
|
|
#define __need_time_t
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/ipc.h>
|
|
|
|
#define SEM_UNDO 1
|
|
|
|
#define GETNCNT 0
|
|
#define GETPID 1
|
|
#define GETVAL 2
|
|
#define GETALL 3
|
|
#define GETZCNT 4
|
|
#define SETVAL 5
|
|
#define SETALL 6
|
|
|
|
struct semid_ds
|
|
{
|
|
struct ipc_perm sem_perm; /* Operation permission structure. */
|
|
unsigned short sem_nsems; /* Number of semaphores in set. */
|
|
time_t sem_otime; /* Last semop() time. */
|
|
time_t sem_ctime; /* Last time changed by semctl(). */
|
|
};
|
|
|
|
// FIXME: A semaphore shall be represented by an anonymous structure, which shall include the following members:
|
|
// unsigned short semval; /* Semaphore value. */
|
|
// pid_t sempid; /* Process ID of last operation. */
|
|
// unsigned short semncnt; /* Number of processes waiting for semval to become greater than current value. */
|
|
// unsigned short semzcnt; /* Number of processes waiting for semval to become 0. */
|
|
|
|
struct sembuf
|
|
{
|
|
unsigned short sem_num; /* Semaphore number. */
|
|
short sem_op; /* Semaphore operation. */
|
|
short sem_flg; /* Operation flags. */
|
|
};
|
|
|
|
int semctl(int, int, int, ...);
|
|
int semget(key_t, int, int);
|
|
int semop(int, struct sembuf *, size_t);
|
|
|
|
__END_DECLS
|
|
|
|
#endif
|