1/* Copyright (C) 2002-2022 Free Software Foundation, Inc. 
2 This file is part of the GNU C Library. 
3 
4 The GNU C Library is free software; you can redistribute it and/or 
5 modify it under the terms of the GNU Lesser General Public 
6 License as published by the Free Software Foundation; either 
7 version 2.1 of the License, or (at your option) any later version. 
8 
9 The GNU C Library is distributed in the hope that it will be useful, 
10 but WITHOUT ANY WARRANTY; without even the implied warranty of 
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
12 Lesser General Public License for more details. 
13 
14 You should have received a copy of the GNU Lesser General Public 
15 License along with the GNU C Library; if not, see 
16 <https://www.gnu.org/licenses/>. */ 
17 
18#ifndef _SEMAPHORE_H 
19#define _SEMAPHORE_H 1 
20 
21#include <features.h> 
22#include <sys/types.h> 
23#ifdef __USE_XOPEN2K 
24# include <bits/types/struct_timespec.h> 
25#endif 
26 
27/* Get the definition for sem_t. */ 
28#include <bits/semaphore.h> 
29 
30 
31__BEGIN_DECLS 
32 
33/* Initialize semaphore object SEM to VALUE. If PSHARED then share it 
34 with other processes. */ 
35extern int sem_init (sem_t *__sem, int __pshared, unsigned int __value
36 __THROW __nonnull ((1)); 
37 
38/* Free resources associated with semaphore object SEM. */ 
39extern int sem_destroy (sem_t *__sem) __THROW __nonnull ((1)); 
40 
41/* Open a named semaphore NAME with open flags OFLAG. */ 
42extern sem_t *sem_open (const char *__name, int __oflag, ...) 
43 __THROW __nonnull ((1)); 
44 
45/* Close descriptor for named semaphore SEM. */ 
46extern int sem_close (sem_t *__sem) __THROW __nonnull ((1)); 
47 
48/* Remove named semaphore NAME. */ 
49extern int sem_unlink (const char *__name) __THROW __nonnull ((1)); 
50 
51/* Wait for SEM being posted. 
52 
53 This function is a cancellation point and therefore not marked with 
54 __THROW. */ 
55extern int sem_wait (sem_t *__sem) __nonnull ((1)); 
56 
57#ifdef __USE_XOPEN2K 
58/* Similar to `sem_wait' but wait only until ABSTIME. 
59 
60 This function is a cancellation point and therefore not marked with 
61 __THROW. */ 
62# ifndef __USE_TIME_BITS64 
63extern int sem_timedwait (sem_t *__restrict __sem
64 const struct timespec *__restrict __abstime
65 __nonnull ((1, 2)); 
66# else 
67# ifdef __REDIRECT 
68extern int __REDIRECT (sem_timedwait, 
69 (sem_t *__restrict __sem, 
70 const struct timespec *__restrict __abstime), 
71 __sem_timedwait64) 
72 __nonnull ((1, 2)); 
73# else 
74# define sem_timedwait __sem_timedwait64 
75# endif 
76# endif 
77#endif 
78 
79#ifdef __USE_GNU 
80# ifndef __USE_TIME_BITS64 
81extern int sem_clockwait (sem_t *__restrict __sem
82 clockid_t clock
83 const struct timespec *__restrict __abstime
84 __nonnull ((1, 3)); 
85# else 
86# ifdef __REDIRECT 
87extern int __REDIRECT (sem_clockwait, 
88 (sem_t *__restrict __sem, 
89 clockid_t clock, 
90 const struct timespec *__restrict __abstime), 
91 __sem_clockwait64) 
92 __nonnull ((1, 3)); 
93# else 
94# define sem_clockwait __sem_clockwait64 
95# endif 
96# endif 
97#endif 
98 
99/* Test whether SEM is posted. */ 
100extern int sem_trywait (sem_t *__sem) __THROWNL __nonnull ((1)); 
101 
102/* Post SEM. */ 
103extern int sem_post (sem_t *__sem) __THROWNL __nonnull ((1)); 
104 
105/* Get current value of SEM and store it in *SVAL. */ 
106extern int sem_getvalue (sem_t *__restrict __sem, int *__restrict __sval
107 __THROW __nonnull ((1, 2)); 
108 
109 
110__END_DECLS 
111 
112#endif /* semaphore.h */ 
113