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.
|