File: 10_fcntl_2_updates.dpatch

package info (click to toggle)
manpages-de 0.4-8
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 3,808 kB
  • ctags: 4
  • sloc: sh: 7,666; makefile: 60
file content (796 lines) | stat: -rw-r--r-- 26,211 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
#! /bin/sh /usr/share/dpatch/dpatch-run
## 10_fcntl_2_updates.dpatch by Daniel Kobras <kobras@debian.org>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: Update to 2002 version of the English original.

@DPATCH@
--- manpages-de-0.4.orig/man2/fcntl.2
+++ manpages-de-0.4/man2/fcntl.2
@@ -2,6 +2,8 @@
 .\"
 .\" This manpage is Copyright (C) 1992 Drew Eckhardt;
 .\"                               1993 Michael Haardt, Ian Jackson.
+.\"                               1998 Jamie Lokier;
+.\"                               2002 Michael Kerrisk.
 .\"                               1995 Martin Schulze
 .\"
 .\" Permission is granted to make and distribute verbatim copies of this
@@ -25,13 +27,24 @@
 .\" the source, must acknowledge the copyright and authors of this work.
 .\"
 .\" Modified Sat Jul 24 13:39:26 1993 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Tue Sep 26 21:47:21 1995 by Andries Brouwer <aeb@cwi.nl>
+.\" and again on 960413 and 980804 and 981223.
+.\" Modified Fri Dec 11 17:57:27 1998 by Jamie Lokier <jamie@imbolc.ucc.ie>
+.\" Applied correction by Christian Ehrhardt - aeb, 990712
+.\" Modified 23 Apr 02, Michael Kerrisk, <mtk16@ext.canterbury.ac.nz>
+.\"     Added note on F_SETFL and O_DIRECT
+.\"     Complete rewrite + expansion of material on file locking
+.\"     Incorporated description of F_NOTIFY, drawing on
+.\"             Stephen Rothwell's notes in Documentation/dnotify.txt.
+.\"     Added description of F_SETLEASE and F_GETLEASE
+.\" Corrected and polished, aeb, 020527.
 .\"
 .\" Translated into german by Martin Schulze (joey@infodrom.north.de)
 .\" Modified Mon Jun 10 12:09:24 1996 by Martin Schulze (joey@linux.de)
 .\"
-.TH FCNTL 2 "27. Januar 1996" Linux "Systemaufrufe"
+.TH FCNTL 2 "24. April 2002" Linux-2.5.18 "Systemaufrufe"
 .SH BEZEICHNUNG
-fcntl \- File-Descriptor Handling
+fcntl \- Manipulation von Dateideskriptoren
 .SH SYNOPSIS
 .nf
 .B #include <unistd.h>
@@ -39,6 +52,7 @@
 .sp
 .BI "int fcntl(int " fd ", int " cmd );
 .BI "int fcntl(int " fd ", int " cmd ", long " arg );
+.BI "int fcntl(int " fd ", int " cmd ", struct flock *" lock );
 .fi
 .SH DESCRIPTION
 .B fcntl
@@ -47,83 +61,546 @@
 .I fd
 aus.  Die jeweilige Operation wird durch den Parameter
 .I cmd
-angegeben:
-.TP 0.9i
+angegeben.
+.SS "Schlieen beim Ausfhren (close-on-exec)"
+.TP
 .B F_DUPFD
-Kopiert
+Sucht den verfgbaren File-Deskriptor mit der niedrigsten Nummer
+grer oder gleich
+.I arg
+und legt in
 .I fd
-in
-.IR arg , " fd"
-wird vorher geschlossen, wenn es ntig ist
-
-Die gleiche Funktionalitt kann einfacher mit der Routine
+eine Kopie davon an.  Im Gegensatz dazu verwendet
 .BR dup2 (2)
-erhalten werden.
-
+exakt den angegebenen Deskriptor.
+.sp
 Die alten und neuen Deskriptoren knnen ausgetauscht werden.  Sie
 verwenden beide die gleichen Locks, Positionszeiger und Flags.  Wenn
 beispielsweise die Dateiposition des einen Deskriptors mit
 .B lseek
 gendert wird, dann ist sie gleichzeitig auch beim anderen Deskriptor gendert.
-
-Die beiden Deskriptoren teilen sich jedoch nicht das close-on-exec
-Flag.
-
+.sp
+Die beiden Deskriptoren teilen sich jedoch nicht das close-on-exec-Flag.
+In der Kopie ist das Flag abgeschaltet, so dass der neue Deskriptor
+beim Ausfhren nicht geschlossen wird.
+.sp
 Bei Erfolg wird der neue Deskriptor zurckgegeben.
 .TP
 .B F_GETFD
-Liest das close-on-exec Flag.  Wenn das low-order-Bit 0 ist, dann bleibt
-die Datei bei einem
+Liest das close-on-exec-Flag.  Ist das
+.BR FD_CLOEXEC -Bit
+0, so bleibt die Datei bei einem
 .B exec
 geffnet, ansonsten wird sie geschlossen.
 .TP
 .B F_SETFD
-Setzt das close-on-exec Flag auf den Wert, der durch
-.I arg
-angegeben wurde.  (Nur das LSB (Least Significant Bit) wird benutzt.)
-
+Setzt das close-on-exec-Flag auf den Wert, des
+.BR FD_CLOEXEC -Bits
+in
+.IR arg .
+.SS "Die Statusflags einer Datei"
+Jedem File-Deskriptor sind verschiedene Flags zugeordnet, die beim Aufruf von
+.BR open (2)
+.\" oder
+.\" .BR creat (2)
+initialisiert und spter durch
+.BR fcntl (2)
+verndert werden knnen.  Kopien eines File-Deskriptors, die mit
+.BR dup2 (2)
+oder
+.BR fork (2),
+etc. erzeugt wurden, besitzen identische Flags.
+.sp
+Die einzelnen Flags und ihre Bedeutung sind in
+.BR open (2)
+beschrieben.
 .TP
 .B F_GETFL
-Liest die Flags des Deskriptors.  (Alle Flags, die mit 
-.BR open (2)
-gesetzt werden knnen, werden zurckgegeben.)
+Liest die Flags des Deskriptors.
 .TP
 .B F_SETFL
-Setzt die Flags des Deskriptors auf die in
+Setzt die Flags des Deskriptors, die sich auf den Dateistatus beziehen,
+auf die in
 .I arg
-angegebenen Werte.  Nur
-.BR O_APPEND " und " O_NONBLOCK
-knnen gesetzt werden.
-
-Diese Flags werden von allen Kopien eines File-Deskriptors geteilt,
-die mit 
-.BR dup (2)
-o.. erzeugt wurden.
-
-Die einzelnen Flags und deren Bedeutung sind in
-.BR open (2).
-beschrieben.
+angegebenen Werte.  Die weiteren Bits fr Zugriffsmodus und Dateierzeugung
+werden ignoriert.  Unter Linux lassen sich auf diese Weise nur die
+Flags O_APPEND, O_NONBLOCK, O_ASYNC und O_DIRECT verndern.
+.P
+.SS "Empfehlendes (advisory) Locking"
+.TP
+Man benutzt
+.BR F_GETLK ", " F_SETLK " und " F_SETLKW ,
+um Locks fr bestimmte Segmente in einer Datei anzufordern, aufzugeben oder
+zu testen.  Das dritte Argument
+.I lock
+verweist auf eine Struktur, die zumindest die folgenden Eintrge enthlt
+(die Reihenfolge ist nicht festgelegt):
+.in +2n
+.nf
+.sp
+struct flock {
+    ...
+    short l_type;    /* Typ des Locks: F_RDLCK,
+                        F_WRLCK, F_UNLCK */
+    short l_whence;  /* Wie ist l_start zu verstehen:
+                        SEEK_SET, SEEK_CUR, SEEK_END */
+    off_t l_start;   /* Startposition des Locks */
+    off_t l_len;     /* Lock fr l_len Bytes anfordern */
+    pid_t l_pid;     /* PID des Prozesses, der das Lock blockiert
+                        (nur F_GETLK) */
+    ...
+};
+.fi
+.in -2n
+.P
+Die Eintrge
+.IR l_whence ", " l_start ", und " l_len
+bestimmen den Bereich, fr den das Lock angefordert werden soll.
+.I l_start
+gibt den Anfang des Bereichs an, und zwar
+relativ zum Anfang der Datei (falls
+.I l_whence
+auf
+.B SEEK_SET
+gesetzt ist),
+relativ zur aktuellen Position in der Datei (falls
+.I l_whence
+auf
+.B SEEK_CUR
+gesetzt ist),
+bzw. relativ zum Dateiende (falls
+.I l_whence
+auf
+.B SEEK_END
+gesetzt ist).  In den beiden zuletzt genannten Fllen kann
+.I l_start
+auch negativ sein, sofern es dadurch nicht ber den Beginn der Datei hinaus
+verweist.  Das Lock wird fr die in
+.I l_len
+angegebene Anzahl von Bytes angefordert.  Sie darf nicht negativ sein.
+(Man beachte jedoch auch die ANMERKUNGEN unten.)  Der Bereich darf ber das
+Dateiende hinausweisen, nicht aber vor den Dateianfang.  Der Wert 0 hat eine
+spezielle Bedeutung:  So fordert man ein Lock an, das an der durch
+.IR l_whence " und " l_start
+bestimmten Position beginnt und bis zum Dateiende reicht, gleichgltig auf
+welche Gre die Datei noch anwchst.
+.P
+Der Eintrag
+.I l_type
+wird benutzt, um entweder ein Lock fr lesenden
+.RB ( F_RDLCK )
+oder schreibenden
+.RB ( F_WDLCK )
+Zugriff auf die Datei anzufordern.
+Beliebig viele Prozesse drfen ein Lock zum Lesen besitzen (geteiltes Lock),
+aber nur ein Prozess gleichzeitig darf ein Lock zum Schreiben erhalten
+(ausschlieendes Lock).  Ein ausschlieendes Lock schliet smtliche anderen
+Locks aus, also sowohl lesende, als auch andere schreibende.
+Ein einzelner Prozess darf fr ein bestimmtes Dateisegment nur einen einzigen
+Typ von Lock besitzen; wird ein neues Lock fr einen Bereich angefordert, fr
+den bereits ein anderes Lock existiert, so wird das bestehende Lock auf den
+Typ des neuen Locks umgestellt.
+(Stimmen die Bereiche der beiden Locks nicht exakt berein, knnen sie
+dadurch aufgeteilt, verkleinert oder mit anderen Locks vereinigt werden.)
+.TP
+.B F_SETLK
+Fordert ein Lock an, falls
+.I l_type
+auf
+.BR F_RDLCK oder F_WRLCK
+gesetzt ist.  Gibt ein Lock auf, falls
+.I l_type
+auf
+.B F_UNLCK
+gesetzt ist.  Der angeforderte Bereich wird durch die Eintrge
+.IR l_whence ", " l_start " und " l_len
+in
+.I lock
+angegeben.  Falls ein anderer Prozess ein konkurrierendes Lock hlt, gibt
+dieser Aufruf \-1 zurck und setzt
+.I errno
+auf
+.B EACCESS
+oder
+.BR EAGAIN .
 .TP
-.BR F_GETLK ", " F_SETLK " und " F_SETLKW
-Behandelt ausschlieliche Locks (discretionary file locks).
+.B F_SETLKW
+Unterscheidet sich nur dann von
+.BR F_SETLK ,
+wenn ein anderer Prozess ein konkurrierendes Lock hlt.  In diesem Fall
+wartet
+.B F_SETLKW
+auf die Freigabe.  Der Aufruf kann durch ein Signal unterbrochen werden.
+Dann wird zunchst der Signalhandler abgearbeitet.  Direkt im Anschluss
+wird
+.BR fcntl ()
+mit Rckgabewert \-1 beendet und
+.I errno
+auf
+.B EINTR
+gesetzt.
+.TP
+.B F_GETLK
+Beim Aufruf beschreibt
+.I lock
+ein zu testendes Lock auf eine Datei.  Knnte es erfolgreich gesetzt werden,
+so setzt
+.BR fcntl ()
+den Eintrag
+.I l_type
+in
+.I lock
+auf
+.B F_UNLCK
+und lsst die brigen Felder unverndert.  Sind bereits ein oder mehrere
+konkurrierende Locks gesetzt, werden die Felder
+.IR l_type ", " l_whence ", " l_start " und " l_len
+in
+.I lock
+mit Informationen ber eines der Locks gefllt.  Die PID des zugehrigen
+Prozesses wird in
+.I l_pid
+zurckgegeben.
+.P
+Um ein Lock fr Lesezugriff anzufordern, muss der Deskriptor zum Lesen geffnet
+sein.  Ein Lock fr Schreibzugriff erfordert, dass der Deskriptor zum Schreiben
+geffnet ist.  Ist der Deskriptor zum Lesen und Schreiben geffnet, knnen
+beliebige Locks angefordert werden.
+.P
+Zustzlich zum expliziten
+.I F_UNLCK
+werden die Locks auch dann aufgegeben, wenn der Prozess endet
+oder wenn er einen
+.I beliebigen
+Deskriptor der Datei schliet, auf die die Locks verweisen.  Das ist schlecht:
+Es bedeutet, dass ein Prozess beispielsweise seine Locks auf
+.I /etc/passwd
+oder
+.I /etc/mtab
+verlieren kann, wenn eine Bibliotheksfunktion aus irgendeinem Grund die
+Datei ffnen und schlieen muss.
+.P
+Die Locks werden nicht ber
+.BR fork (2),
+wohl aber ber
+.BR execve (2)
+hinweg weitergereicht.
+Aufgrund der gepufferten Ein-/Ausgabe in der
+.BR stdio (3)-Bibliothek
+sollten ihre Funktionen nicht zusammen mit Locks verwendet werden.
+Statt dessen sind
+.BR read (2)
+und
+.BR write (2)
+zu benutzen.
+.P
+.SS "Verpflichtende (mandatory) Locks"
+(Nicht im POSIX-Standard spezifiziert.)
+Die oben beschriebenen Locks knnen sowohl empfehlend oder verpflichtend
+verwendet werden.  Ohne zustzliche Schritte sind sie empfehlend.
+Um verpflichtende Locks verwenden zu knnen, mssen sie fr ein Dateisystem
+mit der Option "-o mand" beim Aufruf von
+.BR mount (8)
+zugelassen und zustzlich fr jede Datei aktiviert werden (indem in den
+Zugriffsrechten fr die Gruppe das Ausfhrungsbit gelscht und das
+Set-GID-Bit gesetzt wird).
+.P
+Empfehlende Locks werden nicht erzwungen, sondern sind nur ntzlich zwischen
+kooperierenden Prozessen.  Verpflichtende Locks werden fr smtliche Prozesse
+erzwungen.
+.P
+.SS "Signalkontrolle"
+.BR F_GETOWN ", " F_SETOWN ", " F_GETSIG " und " F_SETSIG
+werden benutzt, um Signale zu kontrollieren, die die Verfgbarkeit von
+Ein- und Ausgaben anzeigen:
 .TP
 .B F_GETOWN
-Gibt die Proze ID (oder Prozegruppe) vom Besitzer eines Sockts zurck.
-
-Prozegruppen werden als negative Werte zurckgegeben.
+Gibt die PID (oder Prozessgruppen-ID) eines Prozesses zurck der im Augenblick
+ein SIGIO- oder SIGURG-Signal fr ein Ereignis auf dem
+Deskriptor
+.I fd
+erhlt.
+Prozessgruppen werden als negative Werte zurckgegeben.
 .TP
 .B F_SETOWN
-Setzt die Proze ID oder Prozegruppe fr den Socket.
+Setzt die PID (oder Prozessgruppen-ID) fr einen Prozess, der 
+bei Ereignissen auf dem Deskriptor
+.I fd
+ein SIGIO- oder SIGURG-Signal bermittelt bekommen soll.
+Prozessgruppen werden als negative Werte angegeben.
+(Mit Hilfe von
+.BR F_SETSIG
+kann auch ein anderes Signal als SIGIO angefordert werden.)
+
+.\" Aus glibc.info:
+Das SIGIO-Signal wird ausgesandt, falls ber den Dateideskriptor neue
+Eingabedaten gelesen oder weitere Ausgabedaten geschrieben werden knnen.
+Als Voraussetzung dafr muss weiterhin das Statusflag
+.B O_ASYNC
+fr den Deskriptor gesetzt sein (entweder als Flag beim Aufruf von
+.IR open (2)
+oder spter ber das Kommando
+.B F_SETFL
+von
+.BR fcntl ).
+.sp
+Welcher Prozess oder welche Prozessgruppe das Signal erhlt, wird mit Hilfe
+des Kommandos
+.B F_SETOWN
+von
+.B fcntl
+gesteuert.  Handelt es sich bei dem Deskriptor um einen Socket, legt der
+Aufruf gleichzeitig auch den Empfnger von SIGURG-Signalen fest.  Derartige
+Signale werden ausgesandt, wenn ein Paket auerhalb der normalen Reihenfolge
+eintrifft.  (SIGURG wird immer dann ausgesandt, wenn
+.BR select (2)
+anzeigen wrde, dass sich der Socket in einem "auergewhnlichen Zustand"
+befindet.)  Bezeichnet der Deskriptor ein Dateneingabegert, wird das
+SIGIO-Signal an die zugehrige Vordergrundprozessgruppe geschickt.
+geschickt.
+.TP
+.B F_GETSIG
+Gibt die Nummer des Signals zurck, das verwendet wird, um Ein- und
+Ausgabeereignisse anzuzeigen.  Ein Wert von null bedeutet, dass
+SIGIO benutzt wird.  Jeder andere Wert (einschlielich SIGIO) entspricht
+der verwendeten Signalnummer.  In diesem Fall knnen weitere Informationen
+ber die Signalverarbeitungsroutine abgerufen werden, sofern sie mit
+SA_SIGINFO installiert wurde.
+.TP
+.B F_SETSIG
+Setzt die Nummer des Signals, das verwendet wird, um Ein- und
+Ausgabeereignisse anzuzeigen.  Ein Wert von null bedeutet, dass
+SIGIO benutzt wird.  Jeder andere Wert (einschlielich SIGIO) bezeichnet
+die verwendende Signalnummer.  In diesem Fall knnen weitere Informationen
+ber die Signalverarbeitungsroutine abgerufen werden, sofern sie mit
+SA_SIGINFO installiert wurde.
+.sp
+Durch Kombination von
+.B F_SETSIG
+mit von Null verschiedenen Werten und SA_SIGINFO fr die
+Signalverarbeitungsroutine (siehe
+.BR sigaction (2)),
+erhlt die Routine in der Struktur
+.I siginfo_t
+Zusatzinformationen ber das Ein-/Ausgabeereignis.  Zeigt das Feld
+.I si_code
+an, dass die Quelle SI_SIGIO ist, enthlt Feld
+.I si_fd
+den zugehrigen Dateideskriptor.  Andernfalls stehen keine weiteren
+Informationen zur Verfgung, an welchem Deskriptor Ein-/Ausgaben anliegen,
+und man sollte auf die gewhnlichen Mechanismen
+.RB ( select (2),
+.BR poll (2),
+.BR read (2)
+in Verbindung mit
+.BR O_NONBLOCK ,
+etc.) zurckgreifen, um sie zu ermitteln.
+.sp
+Wird ein POSIX.1b-Echtzeitsignal (Signalnummer >= SIGRTMIN) ausgewhlt,
+knnen mehrere Ein-/Ausgabeereignisse unter derselben Signalnummer
+aufgereiht werden.  (Das Aufreihen hngt ab vom verfgbaren Speicher.)
+Wie oben stehen auch hier weitere Informationen bereit, falls SA_SIGINFO
+fr die Signalverarbeitungsroutine gesetzt ist.
+.PP
+Mit Hilfe dieser Mechanismen ist es mglich, voll asynchrone Ein-/Ausgabe
+zu implementieren, ohne signifikant auf
+.BR select (2)
+oder
+.BR poll (2)
+zurckzugreifen.
+.PP
+Die Verwendung von
+.BR O_ASYNC ,
+.BR F_GETOWN ,
+.B F_SETOWN
+ist spezifisch fr BSD und Linux.
+.B F_GETSIG
+und
+.B F_SETSIG
+sind Linux-spezifisch.  hnliches lsst sich im Rahmen des POSIX-Standards 
+durch asynchrone Ein-/Ausgabe und die Struktur
+.I aio_sigevent
+erreichen;  sie sind auch unter Linux als Teil der GNU-C-Bibliothek (glibc)
+verfgbar.
+.P
+.SS Leases
+.B F_SETLEASE
+und
+.B F_GETLEASE
+(seit Linux 2.4) werden benutzt, um die aktuellen Einstellungen eines Leases
+zu setzen beziehungsweise abzufragen, das der aufrufende Prozess auf die
+durch den Deskriptor
+.I fd
+beschriebene Datei besitzt.  Mittels eines Dateileases kann sich ein
+Prozess (der Lease-Inhaber) durch ein Signal benachrichtigen lassen, falls
+ein anderer Prozess (der Mitbewerber) versucht, mit
+.BR open (2)
+oder
+.BR truncate (2)
+auf die Datei zuzugreifen.
+.TP
+.B F_SETLEASE
+Setzt oder entfernt ein Dateilease, abhngig vom Wert in
+.IR arg :
 
-Bei diesen Befehlen sind Besitz gleichbedeutend mit dem Empfang von
-.B SIGIO
+.RS
+.TP
+.B F_RDLCK
+Erwirbt ein lesendes Lease.  Der Prozess erhlt dann Nachricht, sobald ein
+anderer Prozess die Datei fr Schreibzugriff ffnet oder sie verkrzen will.
+.TP
+.B F_WRLCK
+Erwirbt ein schreibendes Lease.  Der Prozess erhlt Nachricht, sobald ein
+anderer Prozess die Datei ffnet (fr Schreib- oder Lesezugriff) oder sie
+verkrzen will.  Ein schreibendes Lease kann nur erworben werden, kein
+anderer Prozess die Datei augenblicklich geffnet hat.
+.TP
+.B F_UNLCK
+Entfernt das Lease von der Datei.
+.RE
+.P
+Ein Prozess kann nur einen Typ von Lease auf eine bestimmte Datei besitzen.
+.P
+Leases knnen nur fr gewhnliche Dateien erworben werden.  Ein Prozess ohne
+Sonderprivilegien darf nur Leases auf Dateien erwerben, deren
+Dateisystem-UID der UID des Prozesses entspricht.
+.TP
+.B F_GETLEASE
+Zeigt den Typ des Leases an fr die durch den Deskriptor
+.I fd
+beschriebene Datei.  Der Rckgabewert ist
+.BR F_RDLCK ", " F_WRLCK " oder " F_UNLCK,
+je nachdem, ob der Prozess ein lesendes, schreibendes oder kein Lease auf
+die Datei besitzt.  (Das dritte Argument zu
+.BR fcntl ()
+wird ausgelassen.)
+.PP
+Wenn der Mitbewerber einen
+.BR open ()\-
 oder
-.B SIGURG
-Signalen.
+.BR truncate ()\-Aufruf
+ausfhrt, der mit dem ber
+.B F_SETLEASE
+erworbenen Lease in Konflikt steht, wird der Systemaufruf durch den Kernel
+angehalten.  (Ausgenommen, der hat beim ffnen der Datei mit
+.BR open ()
+das Flag
+.B O_NONBLOCK
+angegeben.  In diesem Fall kehrt der Aufruf sofort mit dem Fehler
+.B EWOULDBLOCK
+zurck.)  Der Kernel benachrichtigt den Lease-Inhaber durch ein Signal
+(fr gewhnlich SIGIO).  Der Lease-Inhaber sollte daraufhin alle ntigen
+Aufrumarbeiten veranlassen (beispielsweise zwischengespeicherte Daten
+schreiben), um die Datei auf den Zugriff durch einen anderen Prozess
+vorzubereiten und anschlieend sein Lease entfernen, indem er das Kommando
+.B F_SETLEASE
+mit
+.B F_UNLCK
+in
+.I arg
+ausfhrt.
+
+Versumt es der Inhaber, das Lease innerhalb der in
+.I /proc/sys/fs/lease-break-time
+genannten Anzahl von Sekunden zu entfernen, dann bricht der Kernel gewaltsam
+das Lease.  Das gilt nicht, falls der Systemaufruf des Mitbewerbers bereits
+zuvor abgebrochen worden ist, das heit, wenn der Mitbewerber die Datei mit
+O_NONBLOCK geffnet hatte oder in der Zwischenzeit ein Signal empfangen hat.
+
+Sobald das Lease freiwillig oder gewaltsam entfernt wurde und falls der
+Systemaufruf des Mitbewerbers nach wie vor blockiert ist, gibt der Kernel
+den Aufruf nun wieder frei.
+
+SIGIO ist das Standardsignal, mit dem der Lease-Inhaber benachrichtigt wird.
+Es kann jedoch mit Hilfe des Kommandos
+.B F_SETSIG
+fr
+.BR fcntl ()
+verndert werden.  Wird ein
+.BR F_SETSIG -Kommando
+ausgefhrt (selbst eines, das SIGIO angibt) und wurde die
+Signalverarbeitungsroutine mit SA_SIGINFO angelegt, dann erhlt die Routine
+als zweites Argument die Struktur
+.I siginfo_t
+bergeben.  Deren Eintrag
+.I si_fd
+enthlt den Deskriptor auf die geleaste Datei, auf die ein anderer Prozess
+zugreifen will.  (Das ist dann sinnvoll, wenn der Prozess Leases auf mehrere
+Dateien besitzt.)
+.SS "Benachrichtigungen ber Vernderungen an Dateien und Verzeichnissen"
+.TP
+.B F_NOTIFY
+(seit Linux 2.4)
+Erteilt eine Nachricht, sobald ein durch Deskriptor
+.I fd
+beschriebenes Verzeichnis oder eine der enthaltenen Dateien verndert wird.
+Die mitzuteilenden Ereignisse sind in 
+.I arg
+zu bestimmen, und zwar als Bitmaske, gebildet aus bitweisem Oder von keinem
+oder beliebig vielen der folgenden Bits:
 
-Prozegruppen werden als negative Werte angegeben..
+.TS
+l l
+----
+lB l.
+Bit	Beschreibung (Ereignis im Verzeichnis)
+DN_ACCESS	Auf eine Datei wurde zugegriffen (read,
+	pread, readv)
+DN_MODIFY	Eine Datei wurde verndert (write,
+	pwrite, writev, truncate, ftruncate)
+DN_CREATE	Eine Datei wurde erstellt (open, creat,
+	mknod, mkdir, link, symlink, rename)
+DN_DELETE	Eine Datei wurde entfernt (unlink,
+	Umbenennen in ein anderes Verzeichnis, rmdir)
+DN_RENAME	Eine Datei in diesem Verzeichnis wurde
+	umbenannt (rename)
+DN_ATTRIB	Die Attribute eine Datei wurden verndert
+	(chown, chmod, utime[s])
+.TE
+.sp
+(Um diese Definitionen zu erhalten, muss vor Einbinden von <fcntl.h> das
+Makro _GNU_SOURCE definiert sein.)
+.sp
+Normalerweise handelt es sich um "Einweg"-Benachrichtigungen, so dass die
+Anwendung sich fr jede weitere Mitteilung stets neu registrieren muss.
+Alternativ dazu kann
+.B DN_MULTISHOT
+angegeben werden, und die Benachrichtigungen werden solange gesendet, bis
+sie explizit abbestellt werden.
+
+.\" Das folgende sieht nach einem armseligen Schnittstellendesign aus...
+Eine Serie von
+.BR F_NOTIFY -Anforderungen
+ist kumulativ, die Ereignisse in
+.I arg
+werden zu den bereits angeforderten hinzugefgt.  Um Benachrichtigungen
+ber smtliche Ereignisse abzubestellen, ist
+.B F_NOTIFY
+mit 0 als
+.I arg
+auszufhren.
+.sp
+Benachrichtigt wird duch bermittlung eines Signals.  Das Standardsignal
+ist SIGIO, es kann jedoch durch das
+.BR F_SETSIG -Kommando
+zu
+.BR fcntl ()
+gendert werden.  In diesem Fall erhlt die Signalverarbeitungsroutine als
+zweites Argument die Struktur
+.I siginfo_t
+bergeben (sofern die Routine mit SA_SIGINFO angelegt wurde).  Deren
+Eintrag
+.I si_fd
+enthlt den Dateideskriptor, der die Benachrichtigung ausgelst hat
+(ntzlich, falls mehrere Verzeichnisse berwacht werden).
+.sp
+Speziell in Verbindung mit
+.B DN_MULTISHOT
+sollten POSIX.1b-Echtzeitsignale fr die Benachrichtigung verwendet werden,
+so dass mehrere Nachrichten aufgereiht werden knnen. 
 .SH RCKGABEWERTE
-Die Rckgabewerte sind abhngig von der ausgefhrten Operation:
+Fr einen erfolgreichen Aufruf hngt der Rckgabewert von der ausgefhrten
+Operation ab:
 .TP 0.9i
 .B F_DUPFD
 Der neue File-Deskriptor.
@@ -135,42 +612,131 @@
 Der Inhalt der Flags.
 .TP
 .B F_GETOWN
-Der Besetzer des Deskriptors.
+Der Besitzer des Deskriptors.
+.TP
+.B F_GETSIG
+Wert des Signals zur Anzeige mglicher Ein-/Ausgabe oder null fr gewhnliches
+SIGIO-Verhalten.
+.TP
+Alle anderen Kommandos
+Null.
 .PP
 Bei einem Fehler wird \-1 zurckgegeben und 
 .I errno
 entsprechend gesetzt.
 .SH FEHLER
 .TP 0.9i
+.BR EACCES " or " EAGAIN
+Aktion ist aufgrund von Locks anderer Prozesse nicht mglich oder weil ein
+anderer Prozess die Datei in seinen Speicher gespiegelt hat. 
+.TP
 .B EBADF
 .I fd
-ist kein geffneter File-Deskriptor.
+ist kein geffneter Dateideskriptor oder der Zugriffsmodus stimmt nicht mit
+dem Typ des angeforderten Locks berein (fr
+.B F_SETLK
+und
+.BR F_SETLKW ).
+.TP
+.B EDEADLK
+Es wurde erkannt, dass das angeforderte
+.BR F_SETLKW -Kommando
+zu einem Deadlock fhren wrde.
+.TP
+.B EFAULT
+.I lock
+verweist auerhalb des verfgbaren Adressraums.
+.TP
+.B EINTR
+Kommando wurde durch ein Signal unterbrochen (fr
+.BR F_SETLKW ).
+Oder Kommando wurde durch ein Signal unterbrochen, bevor das Lock berprft und
+erworben werden konnte (fr
+.BR F_GETLK " Und " F_SETLK ).
+Tritt vor allem auf, wenn ein Lock auf entfernte Dateien (etwa ber NFS)
+angefordert wird, ist jedoch auch auf lokalen Dateisystemen mglich.
 .TP
 .B EINVAL
-Bei
-.BR F_DUPFD :
 .I arg
-ist negativ oder grer als der maximal erlaubte Wert.
+ist negativ oder grer als der maximal erlaubte Wert (fr
+.BR F_DUPFD )
+oder
+.I arg
+ist keine erlaubte Signalnummer (fr
+.BR F_SETSIG ).
 .TP
 .B EMFILE
-Bei
-.BR F_DUPFD :
-Der Proze hat bereits das Maximum an File-Deskriptoren geffnet.
+Der Proze hat bereits das Maximum an Dateideskriptoren geffnet (fr
+.BR F_DUPFD ).
+.TP 
+.B ENOLCK
+Der Proze hat zu viele Locks auf gemeinsame Speichersegmente geffnet,
+die Locktabelle ist voll oder es trat ein Fehler auf bei dem Versuch,
+ein Lock von einem anderen Rechner zu erhalten (etwa ber NFS).
+.TP
+.B EPERM
+Es wurde versucht, fr eine Datei das Flag
+.B O_APPEND
+zu lschen, deren Zugriffsattribute nur das Anfgen von Daten erlauben.
 .SH BEMERKUNGEN
 Die Fehler, die von 
 .BR dup2 (2)
 zurckgegeben werden, sind anders als die von 
 .BR F_DUPFD .
+
+Seit Kernelversion 2.0 werden die durch 
+.BR flock (2)
+und
+.BR fcntl (2)
+gesetzten Locks nicht mehr gegeneinander abgeglichen.
+
+POSIX 1003.1-2001 erlaubt negative Lngenangaben in
+.IR l_len .
+In diesem Fall umfat das Lock den Bereich von
+.IR l_start + l_len
+bis einschlielich
+.IR l_start -1.
+Unter Linux wird das seit den Versionen 2.4.21 beziehungsweise 2.5.49
+untersttzt.
+
+Verschiedene Systeme definieren in 
+.I "struct flock"
+weitere Felder wie zum Beispiel
+.IR l_sysid .
+Denn offensichtlich ist
+.I l_pid
+nicht bermig sinnvoll, falls der Proze, der ein Lock hlt, auf einer
+anderen Maschine laufen kann.
+
 .SH "ABGESTIMMT MIT"
-SVID, AT&T, POSIX, X/OPEN, BSD 4.3.
+SVr4, SVID, POSIX, X/OPEN, BSD 4.3.  In POSIX.1 sind lediglich die
+Operationen F_DUPFD, F_GETFD, F_SETFD, F_GETFL, F_SETFL, F_GETLK,
+F_SETLK und F_SETLKW spezifiziert.  F_GETOWN und F_SETOWN stammen aus
+der BSD-Welt und werden in SVr4 nicht untersttzt;  F_GETSIG und
+F_SETSIG sind Linux-spezifisch.  Auch
+.BR F_NOTIFY ", " F_GETLEASE " und " F_SETLEASE
+gibt es nur unter Linux.  Um ihre Definitionen zu erhalten, mu
+zustzlich noch das Makro _GNU_SOURCE definiert werden, bevor
+<fcntl.h> eingebunden wird.
+Die gltigen Flags F_GETFL und F_SETFL entsprechen den von
+.BR open (2)
+untersttzten und unterscheiden sich zwischen verschiedenen Systemen;
+O_APPEND, O_NONBLOCK, O_RDONLY und O_RDWR sind in POSIX.1 festgelegt.
+SVr4 untersttzt verschiedene weitere Optionen und Flags, die hier nicht
+aufgefhrt sind.
+.PP
+Unter SVr4 sind EIO, ENOLINK und EOVERFLOW als zustzliche mgliche
+Fehler dokumentiert.
 .SH "AUTOREN"
 Drew Eckhardt, Michael Haardt, Ian Jackson und Martin Schulze.
-Ins Deutsche bersetzt von Martin Schulze (joey@infodrom.north.de).
+Ins Deutsche bersetzt von Martin Schulze (joey@infodrom.north.de)
+und Daniel Kobras (kobras@linux.de).
 .SH "SIEHE AUCH"
-.BR open (2),
 .BR dup2 (2),
-.BR F_DUPFD (2),
-.BR F_GETFD (2),
-.BR F_GETFL (2),
-.BR F_GETLK (2),
-.BR socket (2).
+.BR flock (2),
+.BR lockf (3),
+.BR open (2),
+.BR socket (2)
+.P
+Siehe auch locks.txt, mandatory.txt und dnotify.txt in
+/usr/src/linux/Documentation.