OSDN Git Service

(split) LDP: Support po4a.
[linuxjm/LDP_man-pages.git] / po4a / semaphore / po / semaphore.pot
1 # SOME DESCRIPTIVE TITLE
2 # Copyright (C) YEAR Free Software Foundation, Inc.
3 # This file is distributed under the same license as the PACKAGE package.
4 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5 #
6 #, fuzzy
7 msgid ""
8 msgstr ""
9 "Project-Id-Version: PACKAGE VERSION\n"
10 "POT-Creation-Date: 2012-03-19 23:50+0900\n"
11 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13 "Language-Team: LANGUAGE <LL@li.org>\n"
14 "Language: \n"
15 "MIME-Version: 1.0\n"
16 "Content-Type: text/plain; charset=CHARSET\n"
17 "Content-Transfer-Encoding: 8bit\n"
18
19 #. type: TH
20 #: build/C/man3/sem_close.3:26
21 #, no-wrap
22 msgid "SEM_CLOSE"
23 msgstr ""
24
25 #. type: TH
26 #: build/C/man3/sem_close.3:26 build/C/man3/sem_destroy.3:26 build/C/man3/sem_getvalue.3:26 build/C/man3/sem_unlink.3:26
27 #, no-wrap
28 msgid "2006-03-25"
29 msgstr ""
30
31 #. type: TH
32 #: build/C/man3/sem_close.3:26 build/C/man3/sem_destroy.3:26 build/C/man3/sem_getvalue.3:26 build/C/man3/sem_init.3:26 build/C/man3/sem_open.3:26 build/C/man7/sem_overview.7:26 build/C/man3/sem_post.3:26 build/C/man3/sem_unlink.3:26 build/C/man3/sem_wait.3:26 build/C/man2/semctl.2:39 build/C/man2/semget.2:34 build/C/man2/semop.2:33
33 #, no-wrap
34 msgid "Linux"
35 msgstr ""
36
37 #. type: TH
38 #: build/C/man3/sem_close.3:26 build/C/man3/sem_destroy.3:26 build/C/man3/sem_getvalue.3:26 build/C/man3/sem_init.3:26 build/C/man3/sem_open.3:26 build/C/man7/sem_overview.7:26 build/C/man3/sem_post.3:26 build/C/man3/sem_unlink.3:26 build/C/man3/sem_wait.3:26 build/C/man2/semctl.2:39 build/C/man2/semget.2:34 build/C/man2/semop.2:33
39 #, no-wrap
40 msgid "Linux Programmer's Manual"
41 msgstr ""
42
43 #. type: SH
44 #: build/C/man3/sem_close.3:27 build/C/man3/sem_destroy.3:27 build/C/man3/sem_getvalue.3:27 build/C/man3/sem_init.3:27 build/C/man3/sem_open.3:27 build/C/man7/sem_overview.7:27 build/C/man3/sem_post.3:27 build/C/man3/sem_unlink.3:27 build/C/man3/sem_wait.3:27 build/C/man2/semctl.2:40 build/C/man2/semget.2:35 build/C/man2/semop.2:34
45 #, no-wrap
46 msgid "NAME"
47 msgstr ""
48
49 #. type: Plain text
50 #: build/C/man3/sem_close.3:29
51 msgid "sem_close - close a named semaphore"
52 msgstr ""
53
54 #. type: SH
55 #: build/C/man3/sem_close.3:29 build/C/man3/sem_destroy.3:29 build/C/man3/sem_getvalue.3:29 build/C/man3/sem_init.3:29 build/C/man3/sem_open.3:29 build/C/man3/sem_post.3:29 build/C/man3/sem_unlink.3:29 build/C/man3/sem_wait.3:29 build/C/man2/semctl.2:42 build/C/man2/semget.2:37 build/C/man2/semop.2:36
56 #, no-wrap
57 msgid "SYNOPSIS"
58 msgstr ""
59
60 #. type: Plain text
61 #: build/C/man3/sem_close.3:32 build/C/man3/sem_destroy.3:32 build/C/man3/sem_getvalue.3:32 build/C/man3/sem_init.3:32 build/C/man3/sem_post.3:32 build/C/man3/sem_unlink.3:32 build/C/man3/sem_wait.3:32
62 #, no-wrap
63 msgid "B<#include E<lt>semaphore.hE<gt>>\n"
64 msgstr ""
65
66 #. type: Plain text
67 #: build/C/man3/sem_close.3:34
68 #, no-wrap
69 msgid "B<int sem_close(sem_t *>I<sem>B<);>\n"
70 msgstr ""
71
72 #. type: Plain text
73 #: build/C/man3/sem_close.3:37 build/C/man3/sem_destroy.3:37 build/C/man3/sem_getvalue.3:37 build/C/man3/sem_init.3:37 build/C/man3/sem_open.3:41 build/C/man3/sem_post.3:37 build/C/man3/sem_unlink.3:37 build/C/man3/sem_wait.3:41
74 msgid "Link with I<-lrt> or I<-pthread>."
75 msgstr ""
76
77 #. type: SH
78 #: build/C/man3/sem_close.3:37 build/C/man3/sem_destroy.3:37 build/C/man3/sem_getvalue.3:37 build/C/man3/sem_init.3:37 build/C/man3/sem_open.3:41 build/C/man7/sem_overview.7:29 build/C/man3/sem_post.3:37 build/C/man3/sem_unlink.3:37 build/C/man3/sem_wait.3:49 build/C/man2/semctl.2:50 build/C/man2/semget.2:47 build/C/man2/semop.2:55
79 #, no-wrap
80 msgid "DESCRIPTION"
81 msgstr ""
82
83 #. type: Plain text
84 #: build/C/man3/sem_close.3:43
85 msgid ""
86 "B<sem_close>()  closes the named semaphore referred to by I<sem>, allowing "
87 "any resources that the system has allocated to the calling process for this "
88 "semaphore to be freed."
89 msgstr ""
90
91 #. type: SH
92 #: build/C/man3/sem_close.3:43 build/C/man3/sem_destroy.3:55 build/C/man3/sem_getvalue.3:54 build/C/man3/sem_init.3:77 build/C/man3/sem_open.3:104 build/C/man3/sem_post.3:45 build/C/man3/sem_unlink.3:44 build/C/man3/sem_wait.3:108 build/C/man2/semctl.2:338 build/C/man2/semget.2:155 build/C/man2/semop.2:309
93 #, no-wrap
94 msgid "RETURN VALUE"
95 msgstr ""
96
97 #. type: Plain text
98 #: build/C/man3/sem_close.3:49
99 msgid ""
100 "On success B<sem_close>()  returns 0; on error, -1 is returned, with "
101 "I<errno> set to indicate the error."
102 msgstr ""
103
104 #. type: SH
105 #: build/C/man3/sem_close.3:49 build/C/man3/sem_destroy.3:61 build/C/man3/sem_getvalue.3:60 build/C/man3/sem_init.3:83 build/C/man3/sem_open.3:116 build/C/man3/sem_post.3:52 build/C/man3/sem_unlink.3:50 build/C/man3/sem_wait.3:114 build/C/man2/semctl.2:385 build/C/man2/semget.2:161 build/C/man2/semop.2:319
106 #, no-wrap
107 msgid "ERRORS"
108 msgstr ""
109
110 #. type: TP
111 #: build/C/man3/sem_close.3:50 build/C/man3/sem_destroy.3:62 build/C/man3/sem_getvalue.3:61 build/C/man3/sem_init.3:84 build/C/man3/sem_open.3:132 build/C/man3/sem_open.3:137 build/C/man3/sem_post.3:53 build/C/man3/sem_wait.3:119 build/C/man3/sem_wait.3:133 build/C/man2/semctl.2:418 build/C/man2/semget.2:186 build/C/man2/semop.2:367
112 #, no-wrap
113 msgid "B<EINVAL>"
114 msgstr ""
115
116 #. type: Plain text
117 #: build/C/man3/sem_close.3:54 build/C/man3/sem_destroy.3:66 build/C/man3/sem_getvalue.3:65 build/C/man3/sem_post.3:57 build/C/man3/sem_wait.3:123
118 msgid "I<sem> is not a valid semaphore."
119 msgstr ""
120
121 #. type: SH
122 #: build/C/man3/sem_close.3:54 build/C/man3/sem_destroy.3:66 build/C/man3/sem_getvalue.3:65 build/C/man3/sem_init.3:95 build/C/man3/sem_open.3:170 build/C/man7/sem_overview.7:138 build/C/man3/sem_post.3:61 build/C/man3/sem_unlink.3:62 build/C/man3/sem_wait.3:143 build/C/man2/semctl.2:460 build/C/man2/semget.2:217 build/C/man2/semop.2:397
123 #, no-wrap
124 msgid "CONFORMING TO"
125 msgstr ""
126
127 #. type: Plain text
128 #: build/C/man3/sem_close.3:56 build/C/man3/sem_destroy.3:68 build/C/man3/sem_getvalue.3:67 build/C/man3/sem_init.3:97 build/C/man3/sem_open.3:172 build/C/man7/sem_overview.7:140 build/C/man3/sem_post.3:63 build/C/man3/sem_unlink.3:64 build/C/man3/sem_wait.3:145
129 msgid "POSIX.1-2001."
130 msgstr ""
131
132 #. type: SH
133 #: build/C/man3/sem_close.3:56 build/C/man3/sem_destroy.3:68 build/C/man3/sem_getvalue.3:67 build/C/man3/sem_init.3:97 build/C/man7/sem_overview.7:140 build/C/man3/sem_post.3:63 build/C/man3/sem_wait.3:145 build/C/man2/semctl.2:463 build/C/man2/semget.2:221 build/C/man2/semop.2:400
134 #, no-wrap
135 msgid "NOTES"
136 msgstr ""
137
138 #. type: Plain text
139 #: build/C/man3/sem_close.3:60
140 msgid ""
141 "All open named semaphores are automatically closed on process termination, "
142 "or upon B<execve>(2)."
143 msgstr ""
144
145 #. type: SH
146 #: build/C/man3/sem_close.3:60 build/C/man3/sem_destroy.3:74 build/C/man3/sem_getvalue.3:71 build/C/man3/sem_init.3:102 build/C/man3/sem_open.3:172 build/C/man7/sem_overview.7:152 build/C/man3/sem_post.3:70 build/C/man3/sem_unlink.3:64 build/C/man3/sem_wait.3:263 build/C/man2/semctl.2:509 build/C/man2/semget.2:279 build/C/man2/semop.2:513
147 #, no-wrap
148 msgid "SEE ALSO"
149 msgstr ""
150
151 #. type: Plain text
152 #: build/C/man3/sem_close.3:67
153 msgid ""
154 "B<sem_getvalue>(3), B<sem_open>(3), B<sem_post>(3), B<sem_unlink>(3), "
155 "B<sem_wait>(3), B<sem_overview>(7)"
156 msgstr ""
157
158 #. type: SH
159 #: build/C/man3/sem_close.3:67 build/C/man3/sem_destroy.3:79 build/C/man3/sem_getvalue.3:75 build/C/man3/sem_init.3:107 build/C/man3/sem_open.3:179 build/C/man7/sem_overview.7:162 build/C/man3/sem_post.3:74 build/C/man3/sem_unlink.3:70 build/C/man3/sem_wait.3:269 build/C/man2/semctl.2:516 build/C/man2/semget.2:286 build/C/man2/semop.2:521
160 #, no-wrap
161 msgid "COLOPHON"
162 msgstr ""
163
164 #. type: Plain text
165 #: build/C/man3/sem_close.3:74 build/C/man3/sem_destroy.3:86 build/C/man3/sem_getvalue.3:82 build/C/man3/sem_init.3:114 build/C/man3/sem_open.3:186 build/C/man7/sem_overview.7:169 build/C/man3/sem_post.3:81 build/C/man3/sem_unlink.3:77 build/C/man3/sem_wait.3:276 build/C/man2/semctl.2:523 build/C/man2/semget.2:293 build/C/man2/semop.2:528
166 msgid ""
167 "This page is part of release 3.35 of the Linux I<man-pages> project.  A "
168 "description of the project, and information about reporting bugs, can be "
169 "found at http://man7.org/linux/man-pages/."
170 msgstr ""
171
172 #. type: TH
173 #: build/C/man3/sem_destroy.3:26
174 #, no-wrap
175 msgid "SEM_DESTROY"
176 msgstr ""
177
178 #. type: Plain text
179 #: build/C/man3/sem_destroy.3:29
180 msgid "sem_destroy - destroy an unnamed semaphore"
181 msgstr ""
182
183 #. type: Plain text
184 #: build/C/man3/sem_destroy.3:34
185 #, no-wrap
186 msgid "B<int sem_destroy(sem_t *>I<sem>B<);>\n"
187 msgstr ""
188
189 #. type: Plain text
190 #: build/C/man3/sem_destroy.3:41
191 msgid ""
192 "B<sem_destroy>()  destroys the unnamed semaphore at the address pointed to "
193 "by I<sem>."
194 msgstr ""
195
196 #. type: Plain text
197 #: build/C/man3/sem_destroy.3:46
198 msgid ""
199 "Only a semaphore that has been initialized by B<sem_init>(3)  should be "
200 "destroyed using B<sem_destroy>()."
201 msgstr ""
202
203 #. type: Plain text
204 #: build/C/man3/sem_destroy.3:51
205 msgid ""
206 "Destroying a semaphore that other processes or threads are currently blocked "
207 "on (in B<sem_wait>(3))  produces undefined behavior."
208 msgstr ""
209
210 #. type: Plain text
211 #: build/C/man3/sem_destroy.3:55
212 msgid ""
213 "Using a semaphore that has been destroyed produces undefined results, until "
214 "the semaphore has been reinitialized using B<sem_init>(3)."
215 msgstr ""
216
217 #. type: Plain text
218 #: build/C/man3/sem_destroy.3:61
219 msgid ""
220 "B<sem_destroy>()  returns 0 on success; on error, -1 is returned, and "
221 "I<errno> is set to indicate the error."
222 msgstr ""
223
224 #.  But not on NPTL, where sem_destroy () is a no-op..
225 #. type: Plain text
226 #: build/C/man3/sem_destroy.3:74
227 msgid ""
228 "An unnamed semaphore should be destroyed with B<sem_destroy>()  before the "
229 "memory in which it is located is deallocated.  Failure to do this can result "
230 "in resource leaks on some implementations."
231 msgstr ""
232
233 #. type: Plain text
234 #: build/C/man3/sem_destroy.3:79
235 msgid "B<sem_init>(3), B<sem_post>(3), B<sem_wait>(3), B<sem_overview>(7)"
236 msgstr ""
237
238 #. type: TH
239 #: build/C/man3/sem_getvalue.3:26
240 #, no-wrap
241 msgid "SEM_GETVALUE"
242 msgstr ""
243
244 #. type: Plain text
245 #: build/C/man3/sem_getvalue.3:29
246 msgid "sem_getvalue - get the value of a semaphore"
247 msgstr ""
248
249 #. type: Plain text
250 #: build/C/man3/sem_getvalue.3:34
251 #, no-wrap
252 msgid "B<int sem_getvalue(sem_t *>I<sem>B<, int *>I<sval>B<);>\n"
253 msgstr ""
254
255 #. type: Plain text
256 #: build/C/man3/sem_getvalue.3:43
257 msgid ""
258 "B<sem_getvalue>()  places the current value of the semaphore pointed to "
259 "I<sem> into the integer pointed to by I<sval>."
260 msgstr ""
261
262 #. type: Plain text
263 #: build/C/man3/sem_getvalue.3:54
264 msgid ""
265 "If one or more processes or threads are blocked waiting to lock the "
266 "semaphore with B<sem_wait>(3), POSIX.1-2001 permits two possibilities for "
267 "the value returned in I<sval>: either 0 is returned; or a negative number "
268 "whose absolute value is the count of the number of processes and threads "
269 "currently blocked in B<sem_wait>(3).  Linux adopts the former behavior."
270 msgstr ""
271
272 #. type: Plain text
273 #: build/C/man3/sem_getvalue.3:60
274 msgid ""
275 "B<sem_getvalue>()  returns 0 on success; on error, -1 is returned and "
276 "I<errno> is set to indicate the error."
277 msgstr ""
278
279 #. type: Plain text
280 #: build/C/man3/sem_getvalue.3:71
281 msgid ""
282 "The value of the semaphore may already have changed by the time "
283 "B<sem_getvalue>()  returns."
284 msgstr ""
285
286 #. type: Plain text
287 #: build/C/man3/sem_getvalue.3:75
288 msgid "B<sem_post>(3), B<sem_wait>(3), B<sem_overview>(7)"
289 msgstr ""
290
291 #. type: TH
292 #: build/C/man3/sem_init.3:26
293 #, no-wrap
294 msgid "SEM_INIT"
295 msgstr ""
296
297 #. type: TH
298 #: build/C/man3/sem_init.3:26
299 #, no-wrap
300 msgid "2008-07-27"
301 msgstr ""
302
303 #. type: Plain text
304 #: build/C/man3/sem_init.3:29
305 msgid "sem_init - initialize an unnamed semaphore"
306 msgstr ""
307
308 #. type: Plain text
309 #: build/C/man3/sem_init.3:34
310 #, no-wrap
311 msgid ""
312 "B<int sem_init(sem_t *>I<sem>B<, int >I<pshared>B<, unsigned int "
313 ">I<value>B<);>\n"
314 msgstr ""
315
316 #. type: Plain text
317 #: build/C/man3/sem_init.3:44
318 msgid ""
319 "B<sem_init>()  initializes the unnamed semaphore at the address pointed to "
320 "by I<sem>.  The I<value> argument specifies the initial value for the "
321 "semaphore."
322 msgstr ""
323
324 #. type: Plain text
325 #: build/C/man3/sem_init.3:49
326 msgid ""
327 "The I<pshared> argument indicates whether this semaphore is to be shared "
328 "between the threads of a process, or between processes."
329 msgstr ""
330
331 #. type: Plain text
332 #: build/C/man3/sem_init.3:57
333 msgid ""
334 "If I<pshared> has the value 0, then the semaphore is shared between the "
335 "threads of a process, and should be located at some address that is visible "
336 "to all threads (e.g., a global variable, or a variable allocated dynamically "
337 "on the heap)."
338 msgstr ""
339
340 #. type: Plain text
341 #: build/C/man3/sem_init.3:74
342 msgid ""
343 "If I<pshared> is nonzero, then the semaphore is shared between processes, "
344 "and should be located in a region of shared memory (see B<shm_open>(3), "
345 "B<mmap>(2), and B<shmget>(2)).  (Since a child created by B<fork>(2)  "
346 "inherits its parent's memory mappings, it can also access the semaphore.)  "
347 "Any process that can access the shared memory region can operate on the "
348 "semaphore using B<sem_post>(3), B<sem_wait>(3), etc."
349 msgstr ""
350
351 #. type: Plain text
352 #: build/C/man3/sem_init.3:77
353 msgid ""
354 "Initializing a semaphore that has already been initialized results in "
355 "undefined behavior."
356 msgstr ""
357
358 #. type: Plain text
359 #: build/C/man3/sem_init.3:83
360 msgid ""
361 "B<sem_init>()  returns 0 on success; on error, -1 is returned, and I<errno> "
362 "is set to indicate the error."
363 msgstr ""
364
365 #. type: Plain text
366 #: build/C/man3/sem_init.3:89
367 msgid "I<value> exceeds B<SEM_VALUE_MAX>."
368 msgstr ""
369
370 #. type: TP
371 #: build/C/man3/sem_init.3:89
372 #, no-wrap
373 msgid "B<ENOSYS>"
374 msgstr ""
375
376 #. type: Plain text
377 #: build/C/man3/sem_init.3:95
378 msgid ""
379 "I<pshared> is nonzero, but the system does not support process-shared "
380 "semaphores (see B<sem_overview>(7))."
381 msgstr ""
382
383 #. type: Plain text
384 #: build/C/man3/sem_init.3:102
385 msgid ""
386 "Bizarrely, POSIX.1-2001 does not specify the value that should be returned "
387 "by a successful call to B<sem_init>().  POSIX.1-2008 rectifies this, "
388 "specifying the zero return on success."
389 msgstr ""
390
391 #. type: Plain text
392 #: build/C/man3/sem_init.3:107
393 msgid "B<sem_destroy>(3), B<sem_post>(3), B<sem_wait>(3), B<sem_overview>(7)"
394 msgstr ""
395
396 #. type: TH
397 #: build/C/man3/sem_open.3:26
398 #, no-wrap
399 msgid "SEM_OPEN"
400 msgstr ""
401
402 #. type: TH
403 #: build/C/man3/sem_open.3:26
404 #, no-wrap
405 msgid "2009-02-20"
406 msgstr ""
407
408 #. type: Plain text
409 #: build/C/man3/sem_open.3:29
410 msgid "sem_open - initialize and open a named semaphore"
411 msgstr ""
412
413 #. type: Plain text
414 #: build/C/man3/sem_open.3:34
415 #, no-wrap
416 msgid ""
417 "B<#include E<lt>fcntl.hE<gt>>           /* For O_* constants */\n"
418 "B<#include E<lt>sys/stat.hE<gt>>        /* For mode constants */\n"
419 "B<#include E<lt>semaphore.hE<gt>>\n"
420 msgstr ""
421
422 #. type: Plain text
423 #: build/C/man3/sem_open.3:38
424 #, no-wrap
425 msgid ""
426 "B<sem_t *sem_open(const char *>I<name>B<, int >I<oflag>B<);>\n"
427 "B<sem_t *sem_open(const char *>I<name>B<, int >I<oflag>B<, >\n"
428 "B<                mode_t >I<mode>B<, unsigned int >I<value>B<);>\n"
429 msgstr ""
430
431 #. type: Plain text
432 #: build/C/man3/sem_open.3:50
433 msgid ""
434 "B<sem_open>()  creates a new POSIX semaphore or opens an existing "
435 "semaphore.  The semaphore is identified by I<name>.  For details of the "
436 "construction of I<name>, see B<sem_overview>(7)."
437 msgstr ""
438
439 #.  In reality the file system IDs are used on Linux.
440 #. type: Plain text
441 #: build/C/man3/sem_open.3:76
442 msgid ""
443 "The I<oflag> argument specifies flags that control the operation of the "
444 "call.  (Definitions of the flags values can be obtained by including "
445 "I<E<lt>fcntl.hE<gt>>.)  If B<O_CREAT> is specified in I<oflag>, then the "
446 "semaphore is created if it does not already exist.  The owner (user ID) of "
447 "the semaphore is set to the effective user ID of the calling process.  The "
448 "group ownership (group ID) is set to the effective group ID of the calling "
449 "process.  If both B<O_CREAT> and B<O_EXCL> are specified in I<oflag>, then "
450 "an error is returned if a semaphore with the given I<name> already exists."
451 msgstr ""
452
453 #. type: Plain text
454 #: build/C/man3/sem_open.3:104
455 msgid ""
456 "If B<O_CREAT> is specified in I<oflag>, then two additional arguments must "
457 "be supplied.  The I<mode> argument specifies the permissions to be placed on "
458 "the new semaphore, as for B<open>(2).  (Symbolic definitions for the "
459 "permissions bits can be obtained by including I<E<lt>sys/stat.hE<gt>>.)  The "
460 "permissions settings are masked against the process umask.  Both read and "
461 "write permission should be granted to each class of user that will access "
462 "the semaphore.  The I<value> argument specifies the initial value for the "
463 "new semaphore.  If B<O_CREAT> is specified, and a semaphore with the given "
464 "I<name> already exists, then I<mode> and I<value> are ignored."
465 msgstr ""
466
467 #. type: Plain text
468 #: build/C/man3/sem_open.3:116
469 msgid ""
470 "On success, B<sem_open>()  returns the address of the new semaphore; this "
471 "address is used when calling other semaphore-related functions.  On error, "
472 "B<sem_open>()  returns B<SEM_FAILED>, with I<errno> set to indicate the "
473 "error."
474 msgstr ""
475
476 #. type: TP
477 #: build/C/man3/sem_open.3:117 build/C/man3/sem_unlink.3:51 build/C/man2/semctl.2:389 build/C/man2/semget.2:165 build/C/man2/semop.2:331
478 #, no-wrap
479 msgid "B<EACCES>"
480 msgstr ""
481
482 #. type: Plain text
483 #: build/C/man3/sem_open.3:121
484 msgid "The semaphore exists, but the caller does not have permission to open it."
485 msgstr ""
486
487 #. type: TP
488 #: build/C/man3/sem_open.3:121 build/C/man2/semget.2:173
489 #, no-wrap
490 msgid "B<EEXIST>"
491 msgstr ""
492
493 #. type: Plain text
494 #: build/C/man3/sem_open.3:132
495 msgid ""
496 "Both B<O_CREAT> and B<O_EXCL> were specified in I<oflag>, but a semaphore "
497 "with this I<name> already exists."
498 msgstr ""
499
500 #. type: Plain text
501 #: build/C/man3/sem_open.3:137
502 msgid "I<value> was greater than B<SEM_VALUE_MAX>."
503 msgstr ""
504
505 #. type: Plain text
506 #: build/C/man3/sem_open.3:141
507 msgid "I<name> consists of just \"/\", followed by no other characters."
508 msgstr ""
509
510 #. type: TP
511 #: build/C/man3/sem_open.3:141
512 #, no-wrap
513 msgid "B<EMFILE>"
514 msgstr ""
515
516 #. type: Plain text
517 #: build/C/man3/sem_open.3:144
518 msgid "The process already has the maximum number of files and open."
519 msgstr ""
520
521 #. type: TP
522 #: build/C/man3/sem_open.3:144 build/C/man3/sem_unlink.3:54
523 #, no-wrap
524 msgid "B<ENAMETOOLONG>"
525 msgstr ""
526
527 #. type: Plain text
528 #: build/C/man3/sem_open.3:148 build/C/man3/sem_unlink.3:58
529 msgid "I<name> was too long."
530 msgstr ""
531
532 #. type: TP
533 #: build/C/man3/sem_open.3:148
534 #, no-wrap
535 msgid "B<ENFILE>"
536 msgstr ""
537
538 #. type: Plain text
539 #: build/C/man3/sem_open.3:151
540 msgid "The system limit on the total number of open files has been reached."
541 msgstr ""
542
543 #. type: TP
544 #: build/C/man3/sem_open.3:151 build/C/man3/sem_unlink.3:58 build/C/man2/semget.2:197
545 #, no-wrap
546 msgid "B<ENOENT>"
547 msgstr ""
548
549 #.  this error can occur if we have a name of the (nonportable) form
550 #.  /dir/name, and the directory /dev/shm/dir does not exist.
551 #. type: Plain text
552 #: build/C/man3/sem_open.3:167
553 msgid ""
554 "The B<O_CREAT> flag was not specified in I<oflag> and no semaphore with this "
555 "I<name> exists; or, B<O_CREAT> was specified, but I<name> wasn't well "
556 "formed."
557 msgstr ""
558
559 #. type: TP
560 #: build/C/man3/sem_open.3:167 build/C/man2/semget.2:205 build/C/man2/semop.2:374
561 #, no-wrap
562 msgid "B<ENOMEM>"
563 msgstr ""
564
565 #. type: Plain text
566 #: build/C/man3/sem_open.3:170
567 msgid "Insufficient memory."
568 msgstr ""
569
570 #. type: Plain text
571 #: build/C/man3/sem_open.3:179
572 msgid ""
573 "B<sem_close>(3), B<sem_getvalue>(3), B<sem_post>(3), B<sem_unlink>(3), "
574 "B<sem_wait>(3), B<sem_overview>(7)"
575 msgstr ""
576
577 #. type: TH
578 #: build/C/man7/sem_overview.7:26
579 #, no-wrap
580 msgid "SEM_OVERVIEW"
581 msgstr ""
582
583 #. type: TH
584 #: build/C/man7/sem_overview.7:26
585 #, no-wrap
586 msgid "2010-05-22"
587 msgstr ""
588
589 #. type: Plain text
590 #: build/C/man7/sem_overview.7:29
591 msgid "sem_overview - Overview of POSIX semaphores"
592 msgstr ""
593
594 #. type: Plain text
595 #: build/C/man7/sem_overview.7:31
596 msgid "POSIX semaphores allow processes and threads to synchronize their actions."
597 msgstr ""
598
599 #. type: Plain text
600 #: build/C/man7/sem_overview.7:41
601 msgid ""
602 "A semaphore is an integer whose value is never allowed to fall below zero.  "
603 "Two operations can be performed on semaphores: increment the semaphore value "
604 "by one (B<sem_post>(3)); and decrement the semaphore value by one "
605 "(B<sem_wait>(3)).  If the value of a semaphore is currently zero, then a "
606 "B<sem_wait>(3)  operation will block until the value becomes greater than "
607 "zero."
608 msgstr ""
609
610 #. type: Plain text
611 #: build/C/man7/sem_overview.7:44
612 msgid "POSIX semaphores come in two forms: named semaphores and unnamed semaphores."
613 msgstr ""
614
615 #. type: TP
616 #: build/C/man7/sem_overview.7:44
617 #, no-wrap
618 msgid "B<Named semaphores>"
619 msgstr ""
620
621 #.  glibc allows the initial slash to be omitted, and makes
622 #.  multiple initial slashes equivalent to a single slash.
623 #.  This differs from the implementation of POSIX message queues.
624 #.  glibc allows subdirectory components in the name, in which
625 #.  case the subdirectory tree must exist under /dev/shm, and
626 #.  the fist subdirectory component must exist as the name
627 #.  sem.name, and all of the subdirectory components must allow the
628 #.  required permissions if a user wants to create a semaphore
629 #.  object in a subdirectory.
630 #. type: Plain text
631 #: build/C/man7/sem_overview.7:64
632 msgid ""
633 "A named semaphore is identified by a name of the form I</somename>; that is, "
634 "a null-terminated string of up to B<NAME_MAX>I<-4> (i.e., 251) characters "
635 "consisting of an initial slash, followed by one or more characters, none of "
636 "which are slashes.  Two processes can operate on the same named semaphore by "
637 "passing the same name to B<sem_open>(3)."
638 msgstr ""
639
640 #. type: Plain text
641 #: build/C/man7/sem_overview.7:79
642 msgid ""
643 "The B<sem_open>(3)  function creates a new named semaphore or opens an "
644 "existing named semaphore.  After the semaphore has been opened, it can be "
645 "operated on using B<sem_post>(3)  and B<sem_wait>(3).  When a process has "
646 "finished using the semaphore, it can use B<sem_close>(3)  to close the "
647 "semaphore.  When all processes have finished using the semaphore, it can be "
648 "removed from the system using B<sem_unlink>(3)."
649 msgstr ""
650
651 #. type: TP
652 #: build/C/man7/sem_overview.7:79
653 #, no-wrap
654 msgid "B<Unnamed semaphores (memory-based semaphores)>"
655 msgstr ""
656
657 #. type: Plain text
658 #: build/C/man7/sem_overview.7:94
659 msgid ""
660 "An unnamed semaphore does not have a name.  Instead the semaphore is placed "
661 "in a region of memory that is shared between multiple threads (a "
662 "I<thread-shared semaphore>)  or processes (a I<process-shared semaphore>).  "
663 "A thread-shared semaphore is placed in an area of memory shared between the "
664 "threads of a process, for example, a global variable.  A process-shared "
665 "semaphore must be placed in a shared memory region (e.g., a System V shared "
666 "memory segment created using B<shmget>(2), or a POSIX shared memory object "
667 "built created using B<shm_open>(3))."
668 msgstr ""
669
670 #. type: Plain text
671 #: build/C/man7/sem_overview.7:105
672 msgid ""
673 "Before being used, an unnamed semaphore must be initialized using "
674 "B<sem_init>(3).  It can then be operated on using B<sem_post>(3)  and "
675 "B<sem_wait>(3).  When the semaphore is no longer required, and before the "
676 "memory in which it is located is deallocated, the semaphore should be "
677 "destroyed using B<sem_destroy>(3)."
678 msgstr ""
679
680 #. type: Plain text
681 #: build/C/man7/sem_overview.7:108
682 msgid ""
683 "The remainder of this section describes some specific details of the Linux "
684 "implementation of POSIX semaphores."
685 msgstr ""
686
687 #. type: SS
688 #: build/C/man7/sem_overview.7:108
689 #, no-wrap
690 msgid "Versions"
691 msgstr ""
692
693 #. type: Plain text
694 #: build/C/man7/sem_overview.7:114
695 msgid ""
696 "Prior to kernel 2.6, Linux only supported unnamed, thread-shared "
697 "semaphores.  On a system with Linux 2.6 and a glibc that provides the NPTL "
698 "threading implementation, a complete implementation of POSIX semaphores is "
699 "provided."
700 msgstr ""
701
702 #. type: SS
703 #: build/C/man7/sem_overview.7:114
704 #, no-wrap
705 msgid "Persistence"
706 msgstr ""
707
708 #. type: Plain text
709 #: build/C/man7/sem_overview.7:119
710 msgid ""
711 "POSIX named semaphores have kernel persistence: if not removed by "
712 "B<sem_unlink>(3), a semaphore will exist until the system is shut down."
713 msgstr ""
714
715 #. type: SS
716 #: build/C/man7/sem_overview.7:119
717 #, no-wrap
718 msgid "Linking"
719 msgstr ""
720
721 #. type: Plain text
722 #: build/C/man7/sem_overview.7:124
723 msgid ""
724 "Programs using the POSIX semaphores API must be compiled with I<cc -lrt> to "
725 "link against the real-time library, I<librt>."
726 msgstr ""
727
728 #. type: SS
729 #: build/C/man7/sem_overview.7:124
730 #, no-wrap
731 msgid "Accessing named semaphores via the file system"
732 msgstr ""
733
734 #. type: Plain text
735 #: build/C/man7/sem_overview.7:135
736 msgid ""
737 "On Linux, named semaphores are created in a virtual file system, normally "
738 "mounted under I</dev/shm>, with names of the form B<sem.>I<somename>.  (This "
739 "is the reason that semaphore names are limited to B<NAME_MAX>I<-4> rather "
740 "than B<NAME_MAX> characters.)"
741 msgstr ""
742
743 #. type: Plain text
744 #: build/C/man7/sem_overview.7:138
745 msgid ""
746 "Since Linux 2.6.19, ACLs can be placed on files under this directory, to "
747 "control object permissions on a per-user and per-group basis."
748 msgstr ""
749
750 #. type: Plain text
751 #: build/C/man7/sem_overview.7:149
752 msgid ""
753 "System V semaphores (B<semget>(2), B<semop>(2), etc.) are an older semaphore "
754 "API.  POSIX semaphores provide a simpler, and better designed interface than "
755 "System V semaphores; on the other hand POSIX semaphores are less widely "
756 "available (especially on older systems) than System V semaphores."
757 msgstr ""
758
759 #. type: SH
760 #: build/C/man7/sem_overview.7:149 build/C/man3/sem_post.3:67 build/C/man3/sem_wait.3:153 build/C/man2/semop.2:488
761 #, no-wrap
762 msgid "EXAMPLE"
763 msgstr ""
764
765 #. type: Plain text
766 #: build/C/man7/sem_overview.7:152
767 msgid ""
768 "An example of the use of various POSIX semaphore functions is shown in "
769 "B<sem_wait>(3)."
770 msgstr ""
771
772 #. type: Plain text
773 #: build/C/man7/sem_overview.7:162
774 msgid ""
775 "B<sem_close>(3), B<sem_destroy>(3), B<sem_getvalue>(3), B<sem_init>(3), "
776 "B<sem_open>(3), B<sem_post>(3), B<sem_unlink>(3), B<sem_wait>(3), "
777 "B<pthreads>(7)"
778 msgstr ""
779
780 #. type: TH
781 #: build/C/man3/sem_post.3:26
782 #, no-wrap
783 msgid "SEM_POST"
784 msgstr ""
785
786 #. type: TH
787 #: build/C/man3/sem_post.3:26
788 #, no-wrap
789 msgid "2009-03-30"
790 msgstr ""
791
792 #. type: Plain text
793 #: build/C/man3/sem_post.3:29
794 msgid "sem_post - unlock a semaphore"
795 msgstr ""
796
797 #. type: Plain text
798 #: build/C/man3/sem_post.3:34
799 #, no-wrap
800 msgid "B<int sem_post(sem_t *>I<sem>B<);>\n"
801 msgstr ""
802
803 #. type: Plain text
804 #: build/C/man3/sem_post.3:45
805 msgid ""
806 "B<sem_post>()  increments (unlocks) the semaphore pointed to by I<sem>.  If "
807 "the semaphore's value consequently becomes greater than zero, then another "
808 "process or thread blocked in a B<sem_wait>(3)  call will be woken up and "
809 "proceed to lock the semaphore."
810 msgstr ""
811
812 #. type: Plain text
813 #: build/C/man3/sem_post.3:52
814 msgid ""
815 "B<sem_post>()  returns 0 on success; on error, the value of the semaphore is "
816 "left unchanged, -1 is returned, and I<errno> is set to indicate the error."
817 msgstr ""
818
819 #. type: TP
820 #: build/C/man3/sem_post.3:57
821 #, no-wrap
822 msgid "B<EOVERFLOW>"
823 msgstr ""
824
825 #.  Added in POSIX.1-2008 TC1 (Austin Interpretation 213)
826 #. type: Plain text
827 #: build/C/man3/sem_post.3:61
828 msgid "The maximum allowable value for a semaphore would be exceeded."
829 msgstr ""
830
831 #. type: Plain text
832 #: build/C/man3/sem_post.3:67
833 msgid ""
834 "B<sem_post>()  is async-signal-safe: it may be safely called within a signal "
835 "handler."
836 msgstr ""
837
838 #. type: Plain text
839 #: build/C/man3/sem_post.3:70
840 msgid "See B<sem_wait>(3)."
841 msgstr ""
842
843 #. type: Plain text
844 #: build/C/man3/sem_post.3:74
845 msgid "B<sem_getvalue>(3), B<sem_wait>(3), B<sem_overview>(7)"
846 msgstr ""
847
848 #. type: TH
849 #: build/C/man3/sem_unlink.3:26
850 #, no-wrap
851 msgid "SEM_UNLINK"
852 msgstr ""
853
854 #. type: Plain text
855 #: build/C/man3/sem_unlink.3:29
856 msgid "sem_unlink - remove a named semaphore"
857 msgstr ""
858
859 #. type: Plain text
860 #: build/C/man3/sem_unlink.3:34
861 #, no-wrap
862 msgid "B<int sem_unlink(const char *>I<name>B<);>\n"
863 msgstr ""
864
865 #. type: Plain text
866 #: build/C/man3/sem_unlink.3:44
867 msgid ""
868 "B<sem_unlink>()  removes the named semaphore referred to by I<name>.  The "
869 "semaphore name is removed immediately.  The semaphore is destroyed once all "
870 "other processes that have the semaphore open close it."
871 msgstr ""
872
873 #. type: Plain text
874 #: build/C/man3/sem_unlink.3:50
875 msgid ""
876 "On success B<sem_unlink>()  returns 0; on error, -1 is returned, with "
877 "I<errno> set to indicate the error."
878 msgstr ""
879
880 #. type: Plain text
881 #: build/C/man3/sem_unlink.3:54
882 msgid "The caller does not have permission to unlink this semaphore."
883 msgstr ""
884
885 #. type: Plain text
886 #: build/C/man3/sem_unlink.3:62
887 msgid "There is no semaphore with the given I<name>."
888 msgstr ""
889
890 #. type: Plain text
891 #: build/C/man3/sem_unlink.3:70
892 msgid ""
893 "B<sem_getvalue>(3), B<sem_open>(3), B<sem_post>(3), B<sem_wait>(3), "
894 "B<sem_overview>(7)"
895 msgstr ""
896
897 #. type: TH
898 #: build/C/man3/sem_wait.3:26
899 #, no-wrap
900 msgid "SEM_WAIT"
901 msgstr ""
902
903 #. type: TH
904 #: build/C/man3/sem_wait.3:26
905 #, no-wrap
906 msgid "2010-02-25"
907 msgstr ""
908
909 #. type: Plain text
910 #: build/C/man3/sem_wait.3:29
911 msgid "sem_wait, sem_timedwait, sem_trywait - lock a semaphore"
912 msgstr ""
913
914 #. type: Plain text
915 #: build/C/man3/sem_wait.3:34
916 #, no-wrap
917 msgid "B<int sem_wait(sem_t *>I<sem>B<);>\n"
918 msgstr ""
919
920 #. type: Plain text
921 #: build/C/man3/sem_wait.3:36
922 #, no-wrap
923 msgid "B<int sem_trywait(sem_t *>I<sem>B<);>\n"
924 msgstr ""
925
926 #. type: Plain text
927 #: build/C/man3/sem_wait.3:38
928 #, no-wrap
929 msgid ""
930 "B<int sem_timedwait(sem_t *>I<sem>B<, const struct timespec "
931 "*>I<abs_timeout>B<);>\n"
932 msgstr ""
933
934 #. type: Plain text
935 #: build/C/man3/sem_wait.3:45 build/C/man2/semop.2:51
936 msgid "Feature Test Macro Requirements for glibc (see B<feature_test_macros>(7)):"
937 msgstr ""
938
939 #. type: Plain text
940 #: build/C/man3/sem_wait.3:49
941 msgid ""
942 "B<sem_timedwait>(): _POSIX_C_SOURCE\\ E<gt>=\\ 200112L || _XOPEN_SOURCE\\ "
943 "E<gt>=\\ 600"
944 msgstr ""
945
946 #. type: Plain text
947 #: build/C/man3/sem_wait.3:59
948 msgid ""
949 "B<sem_wait>()  decrements (locks) the semaphore pointed to by I<sem>.  If "
950 "the semaphore's value is greater than zero, then the decrement proceeds, and "
951 "the function returns, immediately.  If the semaphore currently has the value "
952 "zero, then the call blocks until either it becomes possible to perform the "
953 "decrement (i.e., the semaphore value rises above zero), or a signal handler "
954 "interrupts the call."
955 msgstr ""
956
957 #. type: Plain text
958 #: build/C/man3/sem_wait.3:69
959 msgid ""
960 "B<sem_trywait>()  is the same as B<sem_wait>(), except that if the decrement "
961 "cannot be immediately performed, then call returns an error (I<errno> set to "
962 "B<EAGAIN>)  instead of blocking."
963 msgstr ""
964
965 #. type: Plain text
966 #: build/C/man3/sem_wait.3:82
967 msgid ""
968 "B<sem_timedwait>()  is the same as B<sem_wait>(), except that I<abs_timeout> "
969 "specifies a limit on the amount of time that the call should block if the "
970 "decrement cannot be immediately performed.  The I<abs_timeout> argument "
971 "points to a structure that specifies an absolute timeout in seconds and "
972 "nanoseconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC).  This "
973 "structure is defined as follows:"
974 msgstr ""
975
976 #. type: Plain text
977 #: build/C/man3/sem_wait.3:89
978 #, no-wrap
979 msgid ""
980 "struct timespec {\n"
981 "    time_t tv_sec;      /* Seconds */\n"
982 "    long   tv_nsec;     /* Nanoseconds [0 .. 999999999] */\n"
983 "};\n"
984 msgstr ""
985
986 #. type: Plain text
987 #: build/C/man3/sem_wait.3:100
988 msgid ""
989 "If the timeout has already expired by the time of the call, and the "
990 "semaphore could not be locked immediately, then B<sem_timedwait>()  fails "
991 "with a timeout error (I<errno> set to B<ETIMEDOUT>)."
992 msgstr ""
993
994 #. type: Plain text
995 #: build/C/man3/sem_wait.3:108
996 msgid ""
997 "If the operation can be performed immediately, then B<sem_timedwait>()  "
998 "never fails with a timeout error, regardless of the value of "
999 "I<abs_timeout>.  Furthermore, the validity of I<abs_timeout> is not checked "
1000 "in this case."
1001 msgstr ""
1002
1003 #. type: Plain text
1004 #: build/C/man3/sem_wait.3:114
1005 msgid ""
1006 "All of these functions return 0 on success; on error, the value of the "
1007 "semaphore is left unchanged, -1 is returned, and I<errno> is set to indicate "
1008 "the error."
1009 msgstr ""
1010
1011 #. type: TP
1012 #: build/C/man3/sem_wait.3:115 build/C/man2/semop.2:363
1013 #, no-wrap
1014 msgid "B<EINTR>"
1015 msgstr ""
1016
1017 #. type: Plain text
1018 #: build/C/man3/sem_wait.3:119
1019 msgid "The call was interrupted by a signal handler; see B<signal>(7)."
1020 msgstr ""
1021
1022 #. type: Plain text
1023 #: build/C/man3/sem_wait.3:126
1024 msgid "The following additional error can occur for B<sem_trywait>():"
1025 msgstr ""
1026
1027 #. type: TP
1028 #: build/C/man3/sem_wait.3:126 build/C/man2/semop.2:338
1029 #, no-wrap
1030 msgid "B<EAGAIN>"
1031 msgstr ""
1032
1033 #. type: Plain text
1034 #: build/C/man3/sem_wait.3:130
1035 msgid ""
1036 "The operation could not be performed without blocking (i.e., the semaphore "
1037 "currently has the value zero)."
1038 msgstr ""
1039
1040 #. type: Plain text
1041 #: build/C/man3/sem_wait.3:133
1042 msgid "The following additional errors can occur for B<sem_timedwait>():"
1043 msgstr ""
1044
1045 #. type: Plain text
1046 #: build/C/man3/sem_wait.3:138
1047 msgid ""
1048 "The value of I<abs_timeout.tv_nsecs> is less than 0, or greater than or "
1049 "equal to 1000 million."
1050 msgstr ""
1051
1052 #. type: TP
1053 #: build/C/man3/sem_wait.3:138
1054 #, no-wrap
1055 msgid "B<ETIMEDOUT>"
1056 msgstr ""
1057
1058 #.  POSIX.1-2001 also allows EDEADLK -- "A deadlock condition
1059 #.  was detected", but this does not occur on Linux(?).
1060 #. type: Plain text
1061 #: build/C/man3/sem_wait.3:143
1062 msgid "The call timed out before the semaphore could be locked."
1063 msgstr ""
1064
1065 #.  sem_wait() is always interrupted on most other implementations,
1066 #.  but on FreeBSD 5.4 SA_RESTART does cause restarting.
1067 #. type: Plain text
1068 #: build/C/man3/sem_wait.3:153
1069 msgid ""
1070 "A signal handler always interrupts a blocked call to one of these functions, "
1071 "regardless of the use of the B<sigaction>(2)  B<SA_RESTART> flag."
1072 msgstr ""
1073
1074 #. type: Plain text
1075 #: build/C/man3/sem_wait.3:172
1076 msgid ""
1077 "The (somewhat trivial) program shown below operates on an unnamed "
1078 "semaphore.  The program expects two command-line arguments.  The first "
1079 "argument specifies a seconds value that is used to set an alarm timer to "
1080 "generate a B<SIGALRM> signal.  This handler performs a B<sem_post>(3)  to "
1081 "increment the semaphore that is being waited on in I<main()> using "
1082 "B<sem_timedwait>().  The second command-line argument specifies the length "
1083 "of the timeout, in seconds, for B<sem_timedwait>().  The following shows "
1084 "what happens on two different runs of the program:"
1085 msgstr ""
1086
1087 #. type: Plain text
1088 #: build/C/man3/sem_wait.3:183
1089 #, no-wrap
1090 msgid ""
1091 "$B< ./a.out 2 3>\n"
1092 "About to call sem_timedwait()\n"
1093 "sem_post() from handler\n"
1094 "sem_getvalue() from handler; value = 1\n"
1095 "sem_timedwait() succeeded\n"
1096 "$B< ./a.out 2 1>\n"
1097 "About to call sem_timedwait()\n"
1098 "sem_timedwait() timed out\n"
1099 msgstr ""
1100
1101 #. type: SS
1102 #: build/C/man3/sem_wait.3:185
1103 #, no-wrap
1104 msgid "Program source"
1105 msgstr ""
1106
1107 #. type: Plain text
1108 #: build/C/man3/sem_wait.3:196
1109 #, no-wrap
1110 msgid ""
1111 "#include E<lt>unistd.hE<gt>\n"
1112 "#include E<lt>stdio.hE<gt>\n"
1113 "#include E<lt>stdlib.hE<gt>\n"
1114 "#include E<lt>semaphore.hE<gt>\n"
1115 "#include E<lt>time.hE<gt>\n"
1116 "#include E<lt>assert.hE<gt>\n"
1117 "#include E<lt>errno.hE<gt>\n"
1118 "#include E<lt>signal.hE<gt>\n"
1119 msgstr ""
1120
1121 #. type: Plain text
1122 #: build/C/man3/sem_wait.3:198
1123 #, no-wrap
1124 msgid "sem_t sem;\n"
1125 msgstr ""
1126
1127 #. type: Plain text
1128 #: build/C/man3/sem_wait.3:201
1129 #, no-wrap
1130 msgid ""
1131 "#define handle_error(msg) \\e\n"
1132 "    do { perror(msg); exit(EXIT_FAILURE); } while (0)\n"
1133 msgstr ""
1134
1135 #. type: Plain text
1136 #: build/C/man3/sem_wait.3:211
1137 #, no-wrap
1138 msgid ""
1139 "static void\n"
1140 "handler(int sig)\n"
1141 "{\n"
1142 "    write(STDOUT_FILENO, \"sem_post() from handler\\en\", 24);\n"
1143 "    if (sem_post(&sem) == -1) {\n"
1144 "        write(STDERR_FILENO, \"sem_post() failed\\en\", 18);\n"
1145 "        _exit(EXIT_FAILURE);\n"
1146 "    }\n"
1147 "}\n"
1148 msgstr ""
1149
1150 #. type: Plain text
1151 #: build/C/man3/sem_wait.3:218
1152 #, no-wrap
1153 msgid ""
1154 "int\n"
1155 "main(int argc, char *argv[])\n"
1156 "{\n"
1157 "    struct sigaction sa;\n"
1158 "    struct timespec ts;\n"
1159 "    int s;\n"
1160 msgstr ""
1161
1162 #. type: Plain text
1163 #: build/C/man3/sem_wait.3:224
1164 #, no-wrap
1165 msgid ""
1166 "    if (argc != 3) {\n"
1167 "        fprintf(stderr, \"Usage: %s E<lt>alarm-secsE<gt> "
1168 "E<lt>wait-secsE<gt>\\en\",\n"
1169 "                argv[0]);\n"
1170 "        exit(EXIT_FAILURE);\n"
1171 "    }\n"
1172 msgstr ""
1173
1174 #. type: Plain text
1175 #: build/C/man3/sem_wait.3:227
1176 #, no-wrap
1177 msgid ""
1178 "    if (sem_init(&sem, 0, 0) == -1)\n"
1179 "        handle_error(\"sem_init\");\n"
1180 msgstr ""
1181
1182 #. type: Plain text
1183 #: build/C/man3/sem_wait.3:229
1184 #, no-wrap
1185 msgid "    /* Establish SIGALRM handler; set alarm timer using argv[1] */\n"
1186 msgstr ""
1187
1188 #. type: Plain text
1189 #: build/C/man3/sem_wait.3:235
1190 #, no-wrap
1191 msgid ""
1192 "    sa.sa_handler = handler;\n"
1193 "    sigemptyset(&sa.sa_mask);\n"
1194 "    sa.sa_flags = 0;\n"
1195 "    if (sigaction(SIGALRM, &sa, NULL) == -1)\n"
1196 "        handle_error(\"sigaction\");\n"
1197 msgstr ""
1198
1199 #. type: Plain text
1200 #: build/C/man3/sem_wait.3:237
1201 #, no-wrap
1202 msgid "    alarm(atoi(argv[1]));\n"
1203 msgstr ""
1204
1205 #. type: Plain text
1206 #: build/C/man3/sem_wait.3:240
1207 #, no-wrap
1208 msgid ""
1209 "    /* Calculate relative interval as current time plus\n"
1210 "       number of seconds given argv[2] */\n"
1211 msgstr ""
1212
1213 #. type: Plain text
1214 #: build/C/man3/sem_wait.3:243
1215 #, no-wrap
1216 msgid ""
1217 "    if (clock_gettime(CLOCK_REALTIME, &ts) == -1)\n"
1218 "        handle_error(\"clock_gettime\");\n"
1219 msgstr ""
1220
1221 #. type: Plain text
1222 #: build/C/man3/sem_wait.3:245
1223 #, no-wrap
1224 msgid "    ts.tv_sec += atoi(argv[2]);\n"
1225 msgstr ""
1226
1227 #. type: Plain text
1228 #: build/C/man3/sem_wait.3:249
1229 #, no-wrap
1230 msgid ""
1231 "    printf(\"main() about to call sem_timedwait()\\en\");\n"
1232 "    while ((s = sem_timedwait(&sem, &ts)) == -1 && errno == EINTR)\n"
1233 "        continue;       /* Restart if interrupted by handler */\n"
1234 msgstr ""
1235
1236 #. type: Plain text
1237 #: build/C/man3/sem_wait.3:251
1238 #, no-wrap
1239 msgid "    /* Check what happened */\n"
1240 msgstr ""
1241
1242 #. type: Plain text
1243 #: build/C/man3/sem_wait.3:259
1244 #, no-wrap
1245 msgid ""
1246 "    if (s == -1) {\n"
1247 "        if (errno == ETIMEDOUT)\n"
1248 "            printf(\"sem_timedwait() timed out\\en\");\n"
1249 "        else\n"
1250 "            perror(\"sem_timedwait\");\n"
1251 "    } else\n"
1252 "        printf(\"sem_timedwait() succeeded\\en\");\n"
1253 msgstr ""
1254
1255 #. type: Plain text
1256 #: build/C/man3/sem_wait.3:262
1257 #, no-wrap
1258 msgid ""
1259 "    exit((s == 0) ? EXIT_SUCCESS : EXIT_FAILURE);\n"
1260 "}\n"
1261 msgstr ""
1262
1263 #. type: Plain text
1264 #: build/C/man3/sem_wait.3:269
1265 msgid ""
1266 "B<clock_gettime>(2), B<sem_getvalue>(3), B<sem_post>(3), B<sem_overview>(7), "
1267 "B<time>(7)"
1268 msgstr ""
1269
1270 #. type: TH
1271 #: build/C/man2/semctl.2:39
1272 #, no-wrap
1273 msgid "SEMCTL"
1274 msgstr ""
1275
1276 #. type: TH
1277 #: build/C/man2/semctl.2:39
1278 #, no-wrap
1279 msgid "2009-09-27"
1280 msgstr ""
1281
1282 #. type: Plain text
1283 #: build/C/man2/semctl.2:42
1284 msgid "semctl - semaphore control operations"
1285 msgstr ""
1286
1287 #. type: Plain text
1288 #: build/C/man2/semctl.2:47 build/C/man2/semget.2:42 build/C/man2/semop.2:41
1289 #, no-wrap
1290 msgid ""
1291 "B<#include E<lt>sys/types.hE<gt>>\n"
1292 "B<#include E<lt>sys/ipc.hE<gt>>\n"
1293 "B<#include E<lt>sys/sem.hE<gt>>\n"
1294 msgstr ""
1295
1296 #. type: Plain text
1297 #: build/C/man2/semctl.2:49
1298 #, no-wrap
1299 msgid "B<int semctl(int >I<semid>B<, int >I<semnum>B<, int >I<cmd>B<, ...);>\n"
1300 msgstr ""
1301
1302 #. type: Plain text
1303 #: build/C/man2/semctl.2:60
1304 msgid ""
1305 "B<semctl>()  performs the control operation specified by I<cmd> on the "
1306 "semaphore set identified by I<semid>, or on the I<semnum>-th semaphore of "
1307 "that set.  (The semaphores in a set are numbered starting at 0.)"
1308 msgstr ""
1309
1310 #. type: Plain text
1311 #: build/C/man2/semctl.2:66
1312 msgid ""
1313 "This function has three or four arguments, depending on I<cmd>.  When there "
1314 "are four, the fourth has the type I<union semun>.  The I<calling program> "
1315 "must define this union as follows:"
1316 msgstr ""
1317
1318 #. type: Plain text
1319 #: build/C/man2/semctl.2:76
1320 #, no-wrap
1321 msgid ""
1322 "union semun {\n"
1323 "    int              val;    /* Value for SETVAL */\n"
1324 "    struct semid_ds *buf;    /* Buffer for IPC_STAT, IPC_SET */\n"
1325 "    unsigned short  *array;  /* Array for GETALL, SETALL */\n"
1326 "    struct seminfo  *__buf;  /* Buffer for IPC_INFO\n"
1327 "                                (Linux-specific) */\n"
1328 "};\n"
1329 msgstr ""
1330
1331 #. type: Plain text
1332 #: build/C/man2/semctl.2:82
1333 msgid ""
1334 "The I<semid_ds> data structure is defined in I<E<lt>sys/sem.hE<gt>> as "
1335 "follows:"
1336 msgstr ""
1337
1338 #. type: Plain text
1339 #: build/C/man2/semctl.2:91
1340 #, no-wrap
1341 msgid ""
1342 "struct semid_ds {\n"
1343 "    struct ipc_perm sem_perm;  /* Ownership and permissions */\n"
1344 "    time_t          sem_otime; /* Last semop time */\n"
1345 "    time_t          sem_ctime; /* Last change time */\n"
1346 "    unsigned short  sem_nsems; /* No. of semaphores in set */\n"
1347 "};\n"
1348 msgstr ""
1349
1350 #. type: Plain text
1351 #: build/C/man2/semctl.2:99
1352 msgid ""
1353 "The I<ipc_perm> structure is defined in I<E<lt>sys/ipc.hE<gt>> as follows "
1354 "(the highlighted fields are settable using B<IPC_SET>):"
1355 msgstr ""
1356
1357 #. type: Plain text
1358 #: build/C/man2/semctl.2:111
1359 #, no-wrap
1360 msgid ""
1361 "struct ipc_perm {\n"
1362 "    key_t          __key; /* Key supplied to semget(2) */\n"
1363 "    uid_t          B<uid>;   /* Effective UID of owner */\n"
1364 "    gid_t          B<gid>;   /* Effective GID of owner */\n"
1365 "    uid_t          cuid;  /* Effective UID of creator */\n"
1366 "    gid_t          cgid;  /* Effective GID of creator */\n"
1367 "    unsigned short B<mode>;  /* Permissions */\n"
1368 "    unsigned short __seq; /* Sequence number */\n"
1369 "};\n"
1370 msgstr ""
1371
1372 #. type: Plain text
1373 #: build/C/man2/semctl.2:117
1374 msgid "Valid values for I<cmd> are:"
1375 msgstr ""
1376
1377 #. type: TP
1378 #: build/C/man2/semctl.2:117
1379 #, no-wrap
1380 msgid "B<IPC_STAT>"
1381 msgstr ""
1382
1383 #. type: Plain text
1384 #: build/C/man2/semctl.2:129
1385 msgid ""
1386 "Copy information from the kernel data structure associated with I<semid> "
1387 "into the I<semid_ds> structure pointed to by I<arg.buf>.  The argument "
1388 "I<semnum> is ignored.  The calling process must have read permission on the "
1389 "semaphore set."
1390 msgstr ""
1391
1392 #. type: TP
1393 #: build/C/man2/semctl.2:129
1394 #, no-wrap
1395 msgid "B<IPC_SET>"
1396 msgstr ""
1397
1398 #. type: Plain text
1399 #: build/C/man2/semctl.2:152
1400 msgid ""
1401 "Write the values of some members of the I<semid_ds> structure pointed to by "
1402 "I<arg.buf> to the kernel data structure associated with this semaphore set, "
1403 "updating also its I<sem_ctime> member.  The following members of the "
1404 "structure are updated: I<sem_perm.uid>, I<sem_perm.gid>, and (the least "
1405 "significant 9 bits of)  I<sem_perm.mode>.  The effective UID of the calling "
1406 "process must match the owner (I<sem_perm.uid>)  or creator "
1407 "(I<sem_perm.cuid>)  of the semaphore set, or the caller must be privileged.  "
1408 "The argument I<semnum> is ignored."
1409 msgstr ""
1410
1411 #. type: TP
1412 #: build/C/man2/semctl.2:152
1413 #, no-wrap
1414 msgid "B<IPC_RMID>"
1415 msgstr ""
1416
1417 #. type: Plain text
1418 #: build/C/man2/semctl.2:167
1419 msgid ""
1420 "Immediately remove the semaphore set, awakening all processes blocked in "
1421 "B<semop>(2)  calls on the set (with an error return and I<errno> set to "
1422 "B<EIDRM>).  The effective user ID of the calling process must match the "
1423 "creator or owner of the semaphore set, or the caller must be privileged.  "
1424 "The argument I<semnum> is ignored."
1425 msgstr ""
1426
1427 #. type: TP
1428 #: build/C/man2/semctl.2:167
1429 #, no-wrap
1430 msgid "B<IPC_INFO> (Linux-specific)"
1431 msgstr ""
1432
1433 #. type: Plain text
1434 #: build/C/man2/semctl.2:179
1435 msgid ""
1436 "Returns information about system-wide semaphore limits and parameters in the "
1437 "structure pointed to by I<arg.__buf>.  This structure is of type I<seminfo>, "
1438 "defined in I<E<lt>sys/sem.hE<gt>> if the B<_GNU_SOURCE> feature test macro "
1439 "is defined:"
1440 msgstr ""
1441
1442 #. type: Plain text
1443 #: build/C/man2/semctl.2:201
1444 #, no-wrap
1445 msgid ""
1446 "struct  seminfo {\n"
1447 "    int semmap;  /* Number of entries in semaphore\n"
1448 "                    map; unused within kernel */\n"
1449 "    int semmni;  /* Maximum number of semaphore sets */\n"
1450 "    int semmns;  /* Maximum number of semaphores in all\n"
1451 "                    semaphore sets */\n"
1452 "    int semmnu;  /* System-wide maximum number of undo\n"
1453 "                    structures; unused within kernel */\n"
1454 "    int semmsl;  /* Maximum number of semaphores in a\n"
1455 "                    set */\n"
1456 "    int semopm;  /* Maximum number of operations for\n"
1457 "                    semop(2) */\n"
1458 "    int semume;  /* Maximum number of undo entries per\n"
1459 "                    process; unused within kernel */\n"
1460 "    int semusz;  /* Size of struct sem_undo */\n"
1461 "    int semvmx;  /* Maximum semaphore value */\n"
1462 "    int semaem;  /* Max. value that can be recorded for\n"
1463 "                    semaphore adjustment (SEM_UNDO) */\n"
1464 "};\n"
1465 msgstr ""
1466
1467 #. type: Plain text
1468 #: build/C/man2/semctl.2:215
1469 msgid ""
1470 "The I<semmsl>, I<semmns>, I<semopm>, and I<semmni> settings can be changed "
1471 "via I</proc/sys/kernel/sem>; see B<proc>(5)  for details."
1472 msgstr ""
1473
1474 #. type: TP
1475 #: build/C/man2/semctl.2:215
1476 #, no-wrap
1477 msgid "B<SEM_INFO> (Linux-specific)"
1478 msgstr ""
1479
1480 #. type: Plain text
1481 #: build/C/man2/semctl.2:229
1482 msgid ""
1483 "Returns a I<seminfo> structure containing the same information as for "
1484 "B<IPC_INFO>, except that the following fields are returned with information "
1485 "about system resources consumed by semaphores: the I<semusz> field returns "
1486 "the number of semaphore sets that currently exist on the system; and the "
1487 "I<semaem> field returns the total number of semaphores in all semaphore sets "
1488 "on the system."
1489 msgstr ""
1490
1491 #. type: TP
1492 #: build/C/man2/semctl.2:229
1493 #, no-wrap
1494 msgid "B<SEM_STAT> (Linux-specific)"
1495 msgstr ""
1496
1497 #. type: Plain text
1498 #: build/C/man2/semctl.2:240
1499 msgid ""
1500 "Returns a I<semid_ds> structure as for B<IPC_STAT>.  However, the I<semid> "
1501 "argument is not a semaphore identifier, but instead an index into the "
1502 "kernel's internal array that maintains information about all semaphore sets "
1503 "on the system."
1504 msgstr ""
1505
1506 #. type: TP
1507 #: build/C/man2/semctl.2:240
1508 #, no-wrap
1509 msgid "B<GETALL>"
1510 msgstr ""
1511
1512 #. type: Plain text
1513 #: build/C/man2/semctl.2:251
1514 msgid ""
1515 "Return B<semval> (i.e., the current value)  for all semaphores of the set "
1516 "into I<arg.array>.  The argument I<semnum> is ignored.  The calling process "
1517 "must have read permission on the semaphore set."
1518 msgstr ""
1519
1520 #. type: TP
1521 #: build/C/man2/semctl.2:251 build/C/man2/semctl.2:349
1522 #, no-wrap
1523 msgid "B<GETNCNT>"
1524 msgstr ""
1525
1526 #. type: Plain text
1527 #: build/C/man2/semctl.2:264
1528 msgid ""
1529 "The system call returns the value of B<semncnt> for the I<semnum>-th "
1530 "semaphore of the set (i.e., the number of processes waiting for an increase "
1531 "of B<semval> for the I<semnum>-th semaphore of the set).  The calling "
1532 "process must have read permission on the semaphore set."
1533 msgstr ""
1534
1535 #. type: TP
1536 #: build/C/man2/semctl.2:264 build/C/man2/semctl.2:353
1537 #, no-wrap
1538 msgid "B<GETPID>"
1539 msgstr ""
1540
1541 #. type: Plain text
1542 #: build/C/man2/semctl.2:277
1543 msgid ""
1544 "The system call returns the value of B<sempid> for the I<semnum>-th "
1545 "semaphore of the set (i.e., the PID of the process that executed the last "
1546 "B<semop>(2)  call for the I<semnum>-th semaphore of the set).  The calling "
1547 "process must have read permission on the semaphore set."
1548 msgstr ""
1549
1550 #. type: TP
1551 #: build/C/man2/semctl.2:277 build/C/man2/semctl.2:357
1552 #, no-wrap
1553 msgid "B<GETVAL>"
1554 msgstr ""
1555
1556 #. type: Plain text
1557 #: build/C/man2/semctl.2:285
1558 msgid ""
1559 "The system call returns the value of B<semval> for the I<semnum>-th "
1560 "semaphore of the set.  The calling process must have read permission on the "
1561 "semaphore set."
1562 msgstr ""
1563
1564 #. type: TP
1565 #: build/C/man2/semctl.2:285 build/C/man2/semctl.2:361
1566 #, no-wrap
1567 msgid "B<GETZCNT>"
1568 msgstr ""
1569
1570 #. type: Plain text
1571 #: build/C/man2/semctl.2:298
1572 msgid ""
1573 "The system call returns the value of B<semzcnt> for the I<semnum>-th "
1574 "semaphore of the set (i.e., the number of processes waiting for B<semval> of "
1575 "the I<semnum>-th semaphore of the set to become 0).  The calling process "
1576 "must have read permission on the semaphore set."
1577 msgstr ""
1578
1579 #. type: TP
1580 #: build/C/man2/semctl.2:298
1581 #, no-wrap
1582 msgid "B<SETALL>"
1583 msgstr ""
1584
1585 #. type: Plain text
1586 #: build/C/man2/semctl.2:320
1587 msgid ""
1588 "Set B<semval> for all semaphores of the set using I<arg.array>, updating "
1589 "also the I<sem_ctime> member of the I<semid_ds> structure associated with "
1590 "the set.  Undo entries (see B<semop>(2))  are cleared for altered semaphores "
1591 "in all processes.  If the changes to semaphore values would permit blocked "
1592 "B<semop>(2)  calls in other processes to proceed, then those processes are "
1593 "woken up.  The argument I<semnum> is ignored.  The calling process must have "
1594 "alter (write) permission on the semaphore set."
1595 msgstr ""
1596
1597 #. type: TP
1598 #: build/C/man2/semctl.2:320
1599 #, no-wrap
1600 msgid "B<SETVAL>"
1601 msgstr ""
1602
1603 #. type: Plain text
1604 #: build/C/man2/semctl.2:338
1605 msgid ""
1606 "Set the value of B<semval> to I<arg.val> for the I<semnum>-th semaphore of "
1607 "the set, updating also the I<sem_ctime> member of the I<semid_ds> structure "
1608 "associated with the set.  Undo entries are cleared for altered semaphores in "
1609 "all processes.  If the changes to semaphore values would permit blocked "
1610 "B<semop>(2)  calls in other processes to proceed, then those processes are "
1611 "woken up.  The calling process must have alter permission on the semaphore "
1612 "set."
1613 msgstr ""
1614
1615 #. type: Plain text
1616 #: build/C/man2/semctl.2:345
1617 msgid "On failure B<semctl>()  returns -1 with I<errno> indicating the error."
1618 msgstr ""
1619
1620 #. type: Plain text
1621 #: build/C/man2/semctl.2:349
1622 msgid ""
1623 "Otherwise the system call returns a nonnegative value depending on I<cmd> as "
1624 "follows:"
1625 msgstr ""
1626
1627 #. type: Plain text
1628 #: build/C/man2/semctl.2:353
1629 msgid "the value of B<semncnt>."
1630 msgstr ""
1631
1632 #. type: Plain text
1633 #: build/C/man2/semctl.2:357
1634 msgid "the value of B<sempid>."
1635 msgstr ""
1636
1637 #. type: Plain text
1638 #: build/C/man2/semctl.2:361
1639 msgid "the value of B<semval>."
1640 msgstr ""
1641
1642 #. type: Plain text
1643 #: build/C/man2/semctl.2:365
1644 msgid "the value of B<semzcnt>."
1645 msgstr ""
1646
1647 #. type: TP
1648 #: build/C/man2/semctl.2:365
1649 #, no-wrap
1650 msgid "B<IPC_INFO>"
1651 msgstr ""
1652
1653 #. type: Plain text
1654 #: build/C/man2/semctl.2:373
1655 msgid ""
1656 "the index of the highest used entry in the kernel's internal array recording "
1657 "information about all semaphore sets.  (This information can be used with "
1658 "repeated B<SEM_STAT> operations to obtain information about all semaphore "
1659 "sets on the system.)"
1660 msgstr ""
1661
1662 #. type: TP
1663 #: build/C/man2/semctl.2:373
1664 #, no-wrap
1665 msgid "B<SEM_INFO>"
1666 msgstr ""
1667
1668 #. type: Plain text
1669 #: build/C/man2/semctl.2:377
1670 msgid "As for B<IPC_INFO>."
1671 msgstr ""
1672
1673 #. type: TP
1674 #: build/C/man2/semctl.2:377
1675 #, no-wrap
1676 msgid "B<SEM_STAT>"
1677 msgstr ""
1678
1679 #. type: Plain text
1680 #: build/C/man2/semctl.2:381
1681 msgid "the identifier of the semaphore set whose index was given in I<semid>."
1682 msgstr ""
1683
1684 #. type: Plain text
1685 #: build/C/man2/semctl.2:385
1686 msgid "All other I<cmd> values return 0 on success."
1687 msgstr ""
1688
1689 #. type: Plain text
1690 #: build/C/man2/semctl.2:389
1691 msgid "On failure, I<errno> will be set to one of the following:"
1692 msgstr ""
1693
1694 #. type: Plain text
1695 #: build/C/man2/semctl.2:408
1696 msgid ""
1697 "The argument I<cmd> has one of the values B<GETALL>, B<GETPID>, B<GETVAL>, "
1698 "B<GETNCNT>, B<GETZCNT>, B<IPC_STAT>, B<SEM_STAT>, B<SETALL>, or B<SETVAL> "
1699 "and the calling process does not have the required permissions on the "
1700 "semaphore set and does not have the B<CAP_IPC_OWNER> capability."
1701 msgstr ""
1702
1703 #. type: TP
1704 #: build/C/man2/semctl.2:408 build/C/man2/semop.2:347
1705 #, no-wrap
1706 msgid "B<EFAULT>"
1707 msgstr ""
1708
1709 #. type: Plain text
1710 #: build/C/man2/semctl.2:415
1711 msgid "The address pointed to by I<arg.buf> or I<arg.array> isn't accessible."
1712 msgstr ""
1713
1714 #. type: TP
1715 #: build/C/man2/semctl.2:415 build/C/man2/semop.2:360
1716 #, no-wrap
1717 msgid "B<EIDRM>"
1718 msgstr ""
1719
1720 #. type: Plain text
1721 #: build/C/man2/semctl.2:418 build/C/man2/semop.2:363
1722 msgid "The semaphore set was removed."
1723 msgstr ""
1724
1725 #. type: Plain text
1726 #: build/C/man2/semctl.2:429
1727 msgid ""
1728 "Invalid value for I<cmd> or I<semid>.  Or: for a B<SEM_STAT> operation, the "
1729 "index value specified in I<semid> referred to an array slot that is "
1730 "currently unused."
1731 msgstr ""
1732
1733 #. type: TP
1734 #: build/C/man2/semctl.2:429
1735 #, no-wrap
1736 msgid "B<EPERM>"
1737 msgstr ""
1738
1739 #. type: Plain text
1740 #: build/C/man2/semctl.2:447
1741 msgid ""
1742 "The argument I<cmd> has the value B<IPC_SET> or B<IPC_RMID> but the "
1743 "effective user ID of the calling process is not the creator (as found in "
1744 "I<sem_perm.cuid>)  or the owner (as found in I<sem_perm.uid>)  of the "
1745 "semaphore set, and the process does not have the B<CAP_SYS_ADMIN> "
1746 "capability."
1747 msgstr ""
1748
1749 #. type: TP
1750 #: build/C/man2/semctl.2:447 build/C/man2/semop.2:382
1751 #, no-wrap
1752 msgid "B<ERANGE>"
1753 msgstr ""
1754
1755 #. type: Plain text
1756 #: build/C/man2/semctl.2:460
1757 msgid ""
1758 "The argument I<cmd> has the value B<SETALL> or B<SETVAL> and the value to "
1759 "which B<semval> is to be set (for some semaphore of the set) is less than 0 "
1760 "or greater than the implementation limit B<SEMVMX>."
1761 msgstr ""
1762
1763 #.  SVr4 documents additional error conditions EINVAL, EFBIG, ENOSPC.
1764 #. type: Plain text
1765 #: build/C/man2/semctl.2:463 build/C/man2/semget.2:221 build/C/man2/semop.2:400
1766 msgid "SVr4, POSIX.1-2001."
1767 msgstr ""
1768
1769 #. type: Plain text
1770 #: build/C/man2/semctl.2:474
1771 msgid ""
1772 "The B<IPC_INFO>, B<SEM_STAT> and B<SEM_INFO> operations are used by the "
1773 "B<ipcs>(1)  program to provide information on allocated resources.  In the "
1774 "future these may modified or moved to a /proc file system interface."
1775 msgstr ""
1776
1777 #. type: Plain text
1778 #: build/C/man2/semctl.2:487
1779 msgid ""
1780 "Various fields in a I<struct semid_ds> were typed as I<short> under Linux "
1781 "2.2 and have become I<long> under Linux 2.4.  To take advantage of this, a "
1782 "recompilation under glibc-2.1.91 or later should suffice.  (The kernel "
1783 "distinguishes old and new calls by an B<IPC_64> flag in I<cmd>.)"
1784 msgstr ""
1785
1786 #. type: Plain text
1787 #: build/C/man2/semctl.2:496
1788 msgid ""
1789 "In some earlier versions of glibc, the I<semun> union was defined in "
1790 "I<E<lt>sys/sem.hE<gt>>, but POSIX.1-2001 requires that the caller define "
1791 "this union.  On versions of glibc where this union is I<not> defined, the "
1792 "macro B<_SEM_SEMUN_UNDEFINED> is defined in I<E<lt>sys/sem.hE<gt>>."
1793 msgstr ""
1794
1795 #. type: Plain text
1796 #: build/C/man2/semctl.2:500
1797 msgid "The following system limit on semaphore sets affects a B<semctl>()  call:"
1798 msgstr ""
1799
1800 #. type: TP
1801 #: build/C/man2/semctl.2:500 build/C/man2/semop.2:446
1802 #, no-wrap
1803 msgid "B<SEMVMX>"
1804 msgstr ""
1805
1806 #. type: Plain text
1807 #: build/C/man2/semctl.2:505
1808 msgid "Maximum value for B<semval>: implementation dependent (32767)."
1809 msgstr ""
1810
1811 #. type: Plain text
1812 #: build/C/man2/semctl.2:509
1813 msgid ""
1814 "For greater portability it is best to always call B<semctl>()  with four "
1815 "arguments."
1816 msgstr ""
1817
1818 #. type: Plain text
1819 #: build/C/man2/semctl.2:516
1820 msgid ""
1821 "B<ipc>(2), B<semget>(2), B<semop>(2), B<capabilities>(7), "
1822 "B<sem_overview>(7), B<svipc>(7)"
1823 msgstr ""
1824
1825 #. type: TH
1826 #: build/C/man2/semget.2:34
1827 #, no-wrap
1828 msgid "SEMGET"
1829 msgstr ""
1830
1831 #. type: TH
1832 #: build/C/man2/semget.2:34
1833 #, no-wrap
1834 msgid "2004-05-27"
1835 msgstr ""
1836
1837 #. type: Plain text
1838 #: build/C/man2/semget.2:37
1839 msgid "semget - get a semaphore set identifier"
1840 msgstr ""
1841
1842 #. type: Plain text
1843 #: build/C/man2/semget.2:47
1844 msgid "B<int semget(key_t >I<key>B<,> B<int >I<nsems>B<,> B<int >I<semflg>B<);>"
1845 msgstr ""
1846
1847 #. type: Plain text
1848 #: build/C/man2/semget.2:65
1849 msgid ""
1850 "The B<semget>()  system call returns the semaphore set identifier associated "
1851 "with the argument I<key>.  A new set of I<nsems> semaphores is created if "
1852 "I<key> has the value B<IPC_PRIVATE> or if no existing semaphore set is "
1853 "associated with I<key> and B<IPC_CREAT> is specified in I<semflg>."
1854 msgstr ""
1855
1856 #. type: Plain text
1857 #: build/C/man2/semget.2:84
1858 msgid ""
1859 "If I<semflg> specifies both B<IPC_CREAT> and B<IPC_EXCL> and a semaphore set "
1860 "already exists for I<key>, then B<semget>()  fails with I<errno> set to "
1861 "B<EEXIST>.  (This is analogous to the effect of the combination B<O_CREAT | "
1862 "O_EXCL> for B<open>(2).)"
1863 msgstr ""
1864
1865 #. type: Plain text
1866 #: build/C/man2/semget.2:97
1867 msgid ""
1868 "Upon creation, the least significant 9 bits of the argument I<semflg> define "
1869 "the permissions (for owner, group and others)  for the semaphore set.  These "
1870 "bits have the same format, and the same meaning, as the I<mode> argument of "
1871 "B<open>(2)  (though the execute permissions are not meaningful for "
1872 "semaphores, and write permissions mean permission to alter semaphore "
1873 "values)."
1874 msgstr ""
1875
1876 #.  In truth, every one of the many implementations that I've tested sets
1877 #.  the values to zero, but I suppose there is/was some obscure
1878 #.  implementation out there that does not.
1879 #. type: Plain text
1880 #: build/C/man2/semget.2:107
1881 msgid ""
1882 "The values of the semaphores in a newly created set are indeterminate.  "
1883 "(POSIX.1-2001 is explicit on this point.)  Although Linux, like many other "
1884 "implementations, initializes the semaphore values to 0, a portable "
1885 "application cannot rely on this: it should explicitly initialize the "
1886 "semaphores to the desired values."
1887 msgstr ""
1888
1889 #. type: Plain text
1890 #: build/C/man2/semget.2:115
1891 msgid ""
1892 "When creating a new semaphore set, B<semget>()  initializes the set's "
1893 "associated data structure, I<semid_ds> (see B<semctl>(2)), as follows:"
1894 msgstr ""
1895
1896 #. type: Plain text
1897 #: build/C/man2/semget.2:120
1898 msgid ""
1899 "I<sem_perm.cuid> and I<sem_perm.uid> are set to the effective user ID of the "
1900 "calling process."
1901 msgstr ""
1902
1903 #. type: Plain text
1904 #: build/C/man2/semget.2:125
1905 msgid ""
1906 "I<sem_perm.cgid> and I<sem_perm.gid> are set to the effective group ID of "
1907 "the calling process."
1908 msgstr ""
1909
1910 #. type: Plain text
1911 #: build/C/man2/semget.2:130
1912 msgid ""
1913 "The least significant 9 bits of I<sem_perm.mode> are set to the least "
1914 "significant 9 bits of I<semflg>."
1915 msgstr ""
1916
1917 #. type: Plain text
1918 #: build/C/man2/semget.2:134
1919 msgid "I<sem_nsems> is set to the value of I<nsems>."
1920 msgstr ""
1921
1922 #. type: Plain text
1923 #: build/C/man2/semget.2:137
1924 msgid "I<sem_otime> is set to 0."
1925 msgstr ""
1926
1927 #. type: Plain text
1928 #: build/C/man2/semget.2:140
1929 msgid "I<sem_ctime> is set to the current time."
1930 msgstr ""
1931
1932 #. type: Plain text
1933 #: build/C/man2/semget.2:151
1934 msgid ""
1935 "The argument I<nsems> can be 0 (a don't care)  when a semaphore set is not "
1936 "being created.  Otherwise I<nsems> must be greater than 0 and less than or "
1937 "equal to the maximum number of semaphores per semaphore set (B<SEMMSL>)."
1938 msgstr ""
1939
1940 #.  and a check is made to see if it is marked for destruction.
1941 #. type: Plain text
1942 #: build/C/man2/semget.2:155
1943 msgid "If the semaphore set already exists, the permissions are verified."
1944 msgstr ""
1945
1946 #. type: Plain text
1947 #: build/C/man2/semget.2:161
1948 msgid ""
1949 "If successful, the return value will be the semaphore set identifier (a "
1950 "nonnegative integer), otherwise -1 is returned, with I<errno> indicating the "
1951 "error."
1952 msgstr ""
1953
1954 #. type: Plain text
1955 #: build/C/man2/semget.2:165
1956 msgid "On failure I<errno> will be set to one of the following:"
1957 msgstr ""
1958
1959 #. type: Plain text
1960 #: build/C/man2/semget.2:173
1961 msgid ""
1962 "A semaphore set exists for I<key>, but the calling process does not have "
1963 "permission to access the set, and does not have the B<CAP_IPC_OWNER> "
1964 "capability."
1965 msgstr ""
1966
1967 #.  .TP
1968 #.  .B EIDRM
1969 #.  The semaphore set is marked to be deleted.
1970 #. type: Plain text
1971 #: build/C/man2/semget.2:186
1972 msgid ""
1973 "A semaphore set exists for I<key> and I<semflg> specified both B<IPC_CREAT> "
1974 "and B<IPC_EXCL>."
1975 msgstr ""
1976
1977 #. type: Plain text
1978 #: build/C/man2/semget.2:197
1979 msgid ""
1980 "I<nsems> is less than 0 or greater than the limit on the number of "
1981 "semaphores per semaphore set (B<SEMMSL>), or a semaphore set corresponding "
1982 "to I<key> already exists, and I<nsems> is larger than the number of "
1983 "semaphores in that set."
1984 msgstr ""
1985
1986 #. type: Plain text
1987 #: build/C/man2/semget.2:205
1988 msgid ""
1989 "No semaphore set exists for I<key> and I<semflg> did not specify "
1990 "B<IPC_CREAT>."
1991 msgstr ""
1992
1993 #. type: Plain text
1994 #: build/C/man2/semget.2:209
1995 msgid ""
1996 "A semaphore set has to be created but the system does not have enough memory "
1997 "for the new data structure."
1998 msgstr ""
1999
2000 #. type: TP
2001 #: build/C/man2/semget.2:209
2002 #, no-wrap
2003 msgid "B<ENOSPC>"
2004 msgstr ""
2005
2006 #. type: Plain text
2007 #: build/C/man2/semget.2:217
2008 msgid ""
2009 "A semaphore set has to be created but the system limit for the maximum "
2010 "number of semaphore sets (B<SEMMNI>), or the system wide maximum number of "
2011 "semaphores (B<SEMMNS>), would be exceeded."
2012 msgstr ""
2013
2014 #. type: Plain text
2015 #: build/C/man2/semget.2:231
2016 msgid ""
2017 "B<IPC_PRIVATE> isn't a flag field but a I<key_t> type.  If this special "
2018 "value is used for I<key>, the system call ignores everything but the least "
2019 "significant 9 bits of I<semflg> and creates a new semaphore set (on "
2020 "success)."
2021 msgstr ""
2022
2023 #. type: Plain text
2024 #: build/C/man2/semget.2:235
2025 msgid ""
2026 "The following limits on semaphore set resources affect the B<semget>()  "
2027 "call:"
2028 msgstr ""
2029
2030 #. type: TP
2031 #: build/C/man2/semget.2:235
2032 #, no-wrap
2033 msgid "B<SEMMNI>"
2034 msgstr ""
2035
2036 #.  This /proc file is not available in Linux 2.2 and earlier -- MTK
2037 #. type: Plain text
2038 #: build/C/man2/semget.2:241
2039 msgid ""
2040 "System wide maximum number of semaphore sets: policy dependent (on Linux, "
2041 "this limit can be read and modified via the fourth field of "
2042 "I</proc/sys/kernel/sem>)."
2043 msgstr ""
2044
2045 #. type: TP
2046 #: build/C/man2/semget.2:241
2047 #, no-wrap
2048 msgid "B<SEMMSL>"
2049 msgstr ""
2050
2051 #. type: Plain text
2052 #: build/C/man2/semget.2:246
2053 msgid ""
2054 "Maximum number of semaphores per semid: implementation dependent (on Linux, "
2055 "this limit can be read and modified via the first field of "
2056 "I</proc/sys/kernel/sem>)."
2057 msgstr ""
2058
2059 #. type: TP
2060 #: build/C/man2/semget.2:246
2061 #, no-wrap
2062 msgid "B<SEMMNS>"
2063 msgstr ""
2064
2065 #. type: Plain text
2066 #: build/C/man2/semget.2:254
2067 msgid ""
2068 "System wide maximum number of semaphores: policy dependent (on Linux, this "
2069 "limit can be read and modified via the second field of "
2070 "I</proc/sys/kernel/sem>).  Values greater than B<SEMMSL * SEMMNI> makes it "
2071 "irrelevant."
2072 msgstr ""
2073
2074 #. type: SH
2075 #: build/C/man2/semget.2:254 build/C/man2/semop.2:458
2076 #, no-wrap
2077 msgid "BUGS"
2078 msgstr ""
2079
2080 #. type: Plain text
2081 #: build/C/man2/semget.2:260
2082 msgid ""
2083 "The name choice B<IPC_PRIVATE> was perhaps unfortunate, B<IPC_NEW> would "
2084 "more clearly show its function."
2085 msgstr ""
2086
2087 #.  In fact they are initialized to zero on Linux, but POSIX.1-2001
2088 #.  does not specify this, and we can't portably rely on it.
2089 #. type: Plain text
2090 #: build/C/man2/semget.2:279
2091 msgid ""
2092 "The semaphores in a set are not initialized by B<semget>().  In order to "
2093 "initialize the semaphores, B<semctl>(2)  must be used to perform a B<SETVAL> "
2094 "or a B<SETALL> operation on the semaphore set.  (Where multiple peers do not "
2095 "know who will be the first to initialize the set, checking for a nonzero "
2096 "I<sem_otime> in the associated data structure retrieved by a B<semctl>(2)  "
2097 "B<IPC_STAT> operation can be used to avoid races.)"
2098 msgstr ""
2099
2100 #. type: Plain text
2101 #: build/C/man2/semget.2:286
2102 msgid ""
2103 "B<semctl>(2), B<semop>(2), B<ftok>(3), B<capabilities>(7), "
2104 "B<sem_overview>(7), B<svipc>(7)"
2105 msgstr ""
2106
2107 #. type: TH
2108 #: build/C/man2/semop.2:33
2109 #, no-wrap
2110 msgid "SEMOP"
2111 msgstr ""
2112
2113 #. type: TH
2114 #: build/C/man2/semop.2:33
2115 #, no-wrap
2116 msgid "2008-10-04"
2117 msgstr ""
2118
2119 #. type: Plain text
2120 #: build/C/man2/semop.2:36
2121 msgid "semop, semtimedop - semaphore operations"
2122 msgstr ""
2123
2124 #. type: Plain text
2125 #: build/C/man2/semop.2:43
2126 #, no-wrap
2127 msgid ""
2128 "B<int semop(int >I<semid>B<, struct sembuf *>I<sops>B<, unsigned "
2129 ">I<nsops>B<);>\n"
2130 msgstr ""
2131
2132 #. type: Plain text
2133 #: build/C/man2/semop.2:46
2134 #, no-wrap
2135 msgid ""
2136 "B<int semtimedop(int >I<semid>B<, struct sembuf *>I<sops>B<, unsigned "
2137 ">I<nsops>B<,>\n"
2138 "B<               struct timespec *>I<timeout>B<);>\n"
2139 msgstr ""
2140
2141 #. type: Plain text
2142 #: build/C/man2/semop.2:55
2143 msgid "B<semtimedop>(): _GNU_SOURCE"
2144 msgstr ""
2145
2146 #. type: Plain text
2147 #: build/C/man2/semop.2:57
2148 msgid "Each semaphore in a semaphore set has the following associated values:"
2149 msgstr ""
2150
2151 #. type: Plain text
2152 #: build/C/man2/semop.2:64
2153 #, no-wrap
2154 msgid ""
2155 "unsigned short  semval;   /* semaphore value */\n"
2156 "unsigned short  semzcnt;  /* # waiting for zero */\n"
2157 "unsigned short  semncnt;  /* # waiting for increase */\n"
2158 "pid_t           sempid;   /* process that did last op */\n"
2159 msgstr ""
2160
2161 #. type: Plain text
2162 #: build/C/man2/semop.2:78
2163 msgid ""
2164 "B<semop>()  performs operations on selected semaphores in the set indicated "
2165 "by I<semid>.  Each of the I<nsops> elements in the array pointed to by "
2166 "I<sops> specifies an operation to be performed on a single semaphore.  The "
2167 "elements of this structure are of type I<struct sembuf>, containing the "
2168 "following members:"
2169 msgstr ""
2170
2171 #. type: Plain text
2172 #: build/C/man2/semop.2:84
2173 #, no-wrap
2174 msgid ""
2175 "unsigned short sem_num;  /* semaphore number */\n"
2176 "short          sem_op;   /* semaphore operation */\n"
2177 "short          sem_flg;  /* operation flags */\n"
2178 msgstr ""
2179
2180 #. type: Plain text
2181 #: build/C/man2/semop.2:96
2182 msgid ""
2183 "Flags recognized in I<sem_flg> are B<IPC_NOWAIT> and B<SEM_UNDO>.  If an "
2184 "operation specifies B<SEM_UNDO>, it will be automatically undone when the "
2185 "process terminates."
2186 msgstr ""
2187
2188 #. type: Plain text
2189 #: build/C/man2/semop.2:111
2190 msgid ""
2191 "The set of operations contained in I<sops> is performed in I<array order>, "
2192 "and I<atomically>, that is, the operations are performed either as a "
2193 "complete unit, or not at all.  The behavior of the system call if not all "
2194 "operations can be performed immediately depends on the presence of the "
2195 "B<IPC_NOWAIT> flag in the individual I<sem_flg> fields, as noted below."
2196 msgstr ""
2197
2198 #. type: Plain text
2199 #: build/C/man2/semop.2:118
2200 msgid ""
2201 "Each operation is performed on the I<sem_num>-th semaphore of the semaphore "
2202 "set, where the first semaphore of the set is numbered 0.  There are three "
2203 "types of operation, distinguished by the value of I<sem_op>."
2204 msgstr ""
2205
2206 #. type: Plain text
2207 #: build/C/man2/semop.2:131
2208 msgid ""
2209 "If I<sem_op> is a positive integer, the operation adds this value to the "
2210 "semaphore value (I<semval>).  Furthermore, if B<SEM_UNDO> is specified for "
2211 "this operation, the system updates the process undo count (I<semadj>)  for "
2212 "this semaphore.  This operation can always proceed\\(emit never forces a "
2213 "process to wait.  The calling process must have alter permission on the "
2214 "semaphore set."
2215 msgstr ""
2216
2217 #. type: Plain text
2218 #: build/C/man2/semop.2:156
2219 msgid ""
2220 "If I<sem_op> is zero, the process must have read permission on the semaphore "
2221 "set.  This is a \"wait-for-zero\" operation: if I<semval> is zero, the "
2222 "operation can immediately proceed.  Otherwise, if B<IPC_NOWAIT> is specified "
2223 "in I<sem_flg>, B<semop>()  fails with I<errno> set to B<EAGAIN> (and none of "
2224 "the operations in I<sops> is performed).  Otherwise I<semzcnt> (the count of "
2225 "processes waiting until this semaphore's value becomes zero)  is incremented "
2226 "by one and the process sleeps until one of the following occurs:"
2227 msgstr ""
2228
2229 #. type: IP
2230 #: build/C/man2/semop.2:156 build/C/man2/semop.2:161 build/C/man2/semop.2:169 build/C/man2/semop.2:179 build/C/man2/semop.2:230 build/C/man2/semop.2:245 build/C/man2/semop.2:252 build/C/man2/semop.2:262
2231 #, no-wrap
2232 msgid "\\(bu"
2233 msgstr ""
2234
2235 #. type: Plain text
2236 #: build/C/man2/semop.2:161
2237 msgid "I<semval> becomes 0, at which time the value of I<semzcnt> is decremented."
2238 msgstr ""
2239
2240 #. type: Plain text
2241 #: build/C/man2/semop.2:169
2242 msgid ""
2243 "The semaphore set is removed: B<semop>()  fails, with I<errno> set to "
2244 "B<EIDRM>."
2245 msgstr ""
2246
2247 #. type: Plain text
2248 #: build/C/man2/semop.2:179
2249 msgid ""
2250 "The calling process catches a signal: the value of I<semzcnt> is decremented "
2251 "and B<semop>()  fails, with I<errno> set to B<EINTR>."
2252 msgstr ""
2253
2254 #. type: Plain text
2255 #: build/C/man2/semop.2:190
2256 msgid ""
2257 "The time limit specified by I<timeout> in a B<semtimedop>()  call expires: "
2258 "B<semop>()  fails, with I<errno> set to B<EAGAIN>."
2259 msgstr ""
2260
2261 #. type: Plain text
2262 #: build/C/man2/semop.2:230
2263 msgid ""
2264 "If I<sem_op> is less than zero, the process must have alter permission on "
2265 "the semaphore set.  If I<semval> is greater than or equal to the absolute "
2266 "value of I<sem_op>, the operation can proceed immediately: the absolute "
2267 "value of I<sem_op> is subtracted from I<semval>, and, if B<SEM_UNDO> is "
2268 "specified for this operation, the system updates the process undo count "
2269 "(I<semadj>)  for this semaphore.  If the absolute value of I<sem_op> is "
2270 "greater than I<semval>, and B<IPC_NOWAIT> is specified in I<sem_flg>, "
2271 "B<semop>()  fails, with I<errno> set to B<EAGAIN> (and none of the "
2272 "operations in I<sops> is performed).  Otherwise I<semncnt> (the counter of "
2273 "processes waiting for this semaphore's value to increase)  is incremented by "
2274 "one and the process sleeps until one of the following occurs:"
2275 msgstr ""
2276
2277 #. type: Plain text
2278 #: build/C/man2/semop.2:245
2279 msgid ""
2280 "I<semval> becomes greater than or equal to the absolute value of I<sem_op>, "
2281 "at which time the value of I<semncnt> is decremented, the absolute value of "
2282 "I<sem_op> is subtracted from I<semval> and, if B<SEM_UNDO> is specified for "
2283 "this operation, the system updates the process undo count (I<semadj>)  for "
2284 "this semaphore."
2285 msgstr ""
2286
2287 #. type: Plain text
2288 #: build/C/man2/semop.2:252
2289 msgid ""
2290 "The semaphore set is removed from the system: B<semop>()  fails, with "
2291 "I<errno> set to B<EIDRM>."
2292 msgstr ""
2293
2294 #. type: Plain text
2295 #: build/C/man2/semop.2:262
2296 msgid ""
2297 "The calling process catches a signal: the value of I<semncnt> is decremented "
2298 "and B<semop>()  fails, with I<errno> set to B<EINTR>."
2299 msgstr ""
2300
2301 #. type: Plain text
2302 #: build/C/man2/semop.2:271
2303 msgid ""
2304 "The time limit specified by I<timeout> in a B<semtimedop>()  call expires: "
2305 "the system call fails, with I<errno> set to B<EAGAIN>."
2306 msgstr ""
2307
2308 #.  and
2309 #.  .I sem_ctime
2310 #. type: Plain text
2311 #: build/C/man2/semop.2:282
2312 msgid ""
2313 "On successful completion, the I<sempid> value for each semaphore specified "
2314 "in the array pointed to by I<sops> is set to the process ID of the calling "
2315 "process.  In addition, the I<sem_otime> is set to the current time."
2316 msgstr ""
2317
2318 #. type: Plain text
2319 #: build/C/man2/semop.2:309
2320 msgid ""
2321 "B<semtimedop>()  behaves identically to B<semop>()  except that in those "
2322 "cases were the calling process would sleep, the duration of that sleep is "
2323 "limited by the amount of elapsed time specified by the I<timespec> structure "
2324 "whose address is passed in the I<timeout> argument.  If the specified time "
2325 "limit has been reached, B<semtimedop>()  fails with I<errno> set to "
2326 "B<EAGAIN> (and none of the operations in I<sops> is performed).  If the "
2327 "I<timeout> argument is NULL, then B<semtimedop>()  behaves exactly like "
2328 "B<semop>()."
2329 msgstr ""
2330
2331 #. type: Plain text
2332 #: build/C/man2/semop.2:319
2333 msgid ""
2334 "If successful B<semop>()  and B<semtimedop>()  return 0; otherwise they "
2335 "return -1 with I<errno> indicating the error."
2336 msgstr ""
2337
2338 #. type: Plain text
2339 #: build/C/man2/semop.2:323
2340 msgid "On failure, I<errno> is set to one of the following:"
2341 msgstr ""
2342
2343 #. type: TP
2344 #: build/C/man2/semop.2:323
2345 #, no-wrap
2346 msgid "B<E2BIG>"
2347 msgstr ""
2348
2349 #. type: Plain text
2350 #: build/C/man2/semop.2:331
2351 msgid ""
2352 "The argument I<nsops> is greater than B<SEMOPM>, the maximum number of "
2353 "operations allowed per system call."
2354 msgstr ""
2355
2356 #. type: Plain text
2357 #: build/C/man2/semop.2:338
2358 msgid ""
2359 "The calling process does not have the permissions required to perform the "
2360 "specified semaphore operations, and does not have the B<CAP_IPC_OWNER> "
2361 "capability."
2362 msgstr ""
2363
2364 #. type: Plain text
2365 #: build/C/man2/semop.2:347
2366 msgid ""
2367 "An operation could not proceed immediately and either B<IPC_NOWAIT> was "
2368 "specified in I<sem_flg> or the time limit specified in I<timeout> expired."
2369 msgstr ""
2370
2371 #. type: Plain text
2372 #: build/C/man2/semop.2:354
2373 msgid ""
2374 "An address specified in either the I<sops> or the I<timeout> argument isn't "
2375 "accessible."
2376 msgstr ""
2377
2378 #. type: TP
2379 #: build/C/man2/semop.2:354
2380 #, no-wrap
2381 msgid "B<EFBIG>"
2382 msgstr ""
2383
2384 #. type: Plain text
2385 #: build/C/man2/semop.2:360
2386 msgid ""
2387 "For some operation the value of I<sem_num> is less than 0 or greater than or "
2388 "equal to the number of semaphores in the set."
2389 msgstr ""
2390
2391 #. type: Plain text
2392 #: build/C/man2/semop.2:367
2393 msgid ""
2394 "While blocked in this system call, the process caught a signal; see "
2395 "B<signal>(7)."
2396 msgstr ""
2397
2398 #. type: Plain text
2399 #: build/C/man2/semop.2:374
2400 msgid ""
2401 "The semaphore set doesn't exist, or I<semid> is less than zero, or I<nsops> "
2402 "has a nonpositive value."
2403 msgstr ""
2404
2405 #. type: Plain text
2406 #: build/C/man2/semop.2:382
2407 msgid ""
2408 "The I<sem_flg> of some operation specified B<SEM_UNDO> and the system does "
2409 "not have enough memory to allocate the undo structure."
2410 msgstr ""
2411
2412 #. type: Plain text
2413 #: build/C/man2/semop.2:390
2414 msgid ""
2415 "For some operation I<sem_op+semval> is greater than B<SEMVMX>, the "
2416 "implementation dependent maximum value for I<semval>."
2417 msgstr ""
2418
2419 #. type: SH
2420 #: build/C/man2/semop.2:390
2421 #, no-wrap
2422 msgid "VERSIONS"
2423 msgstr ""
2424
2425 #. type: Plain text
2426 #: build/C/man2/semop.2:397
2427 msgid ""
2428 "B<semtimedop>()  first appeared in Linux 2.5.52, and was subsequently "
2429 "backported into kernel 2.4.22.  Glibc support for B<semtimedop>()  first "
2430 "appeared in version 2.3.3."
2431 msgstr ""
2432
2433 #. type: Plain text
2434 #: build/C/man2/semop.2:408
2435 msgid ""
2436 "The I<sem_undo> structures of a process aren't inherited by the child "
2437 "produced by B<fork>(2), but they are inherited across an B<execve>(2)  "
2438 "system call."
2439 msgstr ""
2440
2441 #. type: Plain text
2442 #: build/C/man2/semop.2:414
2443 msgid ""
2444 "B<semop>()  is never automatically restarted after being interrupted by a "
2445 "signal handler, regardless of the setting of the B<SA_RESTART> flag when "
2446 "establishing a signal handler."
2447 msgstr ""
2448
2449 #. type: Plain text
2450 #: build/C/man2/semop.2:429
2451 msgid ""
2452 "I<semadj> is a per-process integer which is simply the (negative) count of "
2453 "all semaphore operations performed specifying the B<SEM_UNDO> flag.  When a "
2454 "semaphore's value is directly set using the B<SETVAL> or B<SETALL> request "
2455 "to B<semctl>(2), the corresponding I<semadj> values in all processes are "
2456 "cleared."
2457 msgstr ""
2458
2459 #. type: Plain text
2460 #: build/C/man2/semop.2:434
2461 msgid ""
2462 "The I<semval>, I<sempid>, I<semzcnt>, and I<semnct> values for a semaphore "
2463 "can all be retrieved using appropriate B<semctl>(2)  calls."
2464 msgstr ""
2465
2466 #. type: Plain text
2467 #: build/C/man2/semop.2:438
2468 msgid "The following limits on semaphore set resources affect the B<semop>()  call:"
2469 msgstr ""
2470
2471 #. type: TP
2472 #: build/C/man2/semop.2:438
2473 #, no-wrap
2474 msgid "B<SEMOPM>"
2475 msgstr ""
2476
2477 #.  This /proc file is not available in Linux 2.2 and earlier -- MTK
2478 #. type: Plain text
2479 #: build/C/man2/semop.2:446
2480 msgid ""
2481 "Maximum number of operations allowed for one B<semop>()  call (32)  (on "
2482 "Linux, this limit can be read and modified via the third field of "
2483 "I</proc/sys/kernel/sem>)."
2484 msgstr ""
2485
2486 #. type: Plain text
2487 #: build/C/man2/semop.2:451
2488 msgid "Maximum allowable value for I<semval>: implementation dependent (32767)."
2489 msgstr ""
2490
2491 #. type: Plain text
2492 #: build/C/man2/semop.2:458
2493 msgid ""
2494 "The implementation has no intrinsic limits for the adjust on exit maximum "
2495 "value (B<SEMAEM>), the system wide maximum number of undo structures "
2496 "(B<SEMMNU>)  and the per-process maximum number of undo entries system "
2497 "parameters."
2498 msgstr ""
2499
2500 #. type: Plain text
2501 #: build/C/man2/semop.2:479
2502 msgid ""
2503 "When a process terminates, its set of associated I<semadj> structures is "
2504 "used to undo the effect of all of the semaphore operations it performed with "
2505 "the B<SEM_UNDO> flag.  This raises a difficulty: if one (or more) of these "
2506 "semaphore adjustments would result in an attempt to decrease a semaphore's "
2507 "value below zero, what should an implementation do? One possible approach "
2508 "would be to block until all the semaphore adjustments could be performed.  "
2509 "This is however undesirable since it could force process termination to "
2510 "block for arbitrarily long periods.  Another possibility is that such "
2511 "semaphore adjustments could be ignored altogether (somewhat analogously to "
2512 "failing when B<IPC_NOWAIT> is specified for a semaphore operation).  Linux "
2513 "adopts a third approach: decreasing the semaphore value as far as possible "
2514 "(i.e., to zero) and allowing process termination to proceed immediately."
2515 msgstr ""
2516
2517 #.  The bug report:
2518 #.  http://marc.theaimsgroup.com/?l=linux-kernel&m=110260821123863&w=2
2519 #.  the fix:
2520 #.  http://marc.theaimsgroup.com/?l=linux-kernel&m=110261701025794&w=2
2521 #. type: Plain text
2522 #: build/C/man2/semop.2:488
2523 msgid ""
2524 "In kernels 2.6.x, x E<lt>= 10, there is a bug that in some circumstances "
2525 "prevents a process that is waiting for a semaphore value to become zero from "
2526 "being woken up when the value does actually become zero.  This bug is fixed "
2527 "in kernel 2.6.11."
2528 msgstr ""
2529
2530 #. type: Plain text
2531 #: build/C/man2/semop.2:493
2532 msgid ""
2533 "The following code segment uses B<semop>()  to atomically wait for the value "
2534 "of semaphore 0 to become zero, and then increment the semaphore value by "
2535 "one."
2536 msgstr ""
2537
2538 #. type: Plain text
2539 #: build/C/man2/semop.2:497
2540 #, no-wrap
2541 msgid ""
2542 "    struct sembuf sops[2];\n"
2543 "    int semid;\n"
2544 msgstr ""
2545
2546 #. type: Plain text
2547 #: build/C/man2/semop.2:499
2548 #, no-wrap
2549 msgid "    /* Code to set I<semid> omitted */\n"
2550 msgstr ""
2551
2552 #. type: Plain text
2553 #: build/C/man2/semop.2:503
2554 #, no-wrap
2555 msgid ""
2556 "    sops[0].sem_num = 0;        /* Operate on semaphore 0 */\n"
2557 "    sops[0].sem_op = 0;         /* Wait for value to equal 0 */\n"
2558 "    sops[0].sem_flg = 0;\n"
2559 msgstr ""
2560
2561 #. type: Plain text
2562 #: build/C/man2/semop.2:507
2563 #, no-wrap
2564 msgid ""
2565 "    sops[1].sem_num = 0;        /* Operate on semaphore 0 */\n"
2566 "    sops[1].sem_op = 1;         /* Increment value by one */\n"
2567 "    sops[1].sem_flg = 0;\n"
2568 msgstr ""
2569
2570 #. type: Plain text
2571 #: build/C/man2/semop.2:512
2572 #, no-wrap
2573 msgid ""
2574 "    if (semop(semid, sops, 2) == -1) {\n"
2575 "        perror(\"semop\");\n"
2576 "        exit(EXIT_FAILURE);\n"
2577 "    }\n"
2578 msgstr ""
2579
2580 #. type: Plain text
2581 #: build/C/man2/semop.2:521
2582 msgid ""
2583 "B<semctl>(2), B<semget>(2), B<sigaction>(2), B<capabilities>(7), "
2584 "B<sem_overview>(7), B<svipc>(7), B<time>(7)"
2585 msgstr ""