Definition | #include <unistd.h> int lockf(int fildes, int function, off_t size); | |
Beschreibung | Mit fildes ist ein offener Dateideskriptor. Der Dateideskriptor muss die function ist ein Steuerwert, der die zu treffenden Maßnahmen angibt. Die zulässigen Werte für function sind, wie folgt, in #define F_ULOCK 0 /* gesperrten Abschnitt freigeben */ #define F_LOCK 1 /* Abschnitt exklusiv sperren */ #define F_TLOCK 2 /* Abschnitt testen und exklusiv sperren */ #define F_TEST 3 /* Abschnitt auf Sperren anderer Prozesse testen */ Alle anderen Werte von function sind für zukünftige Erweiterungen reserviert und führen zu einer Fehlermeldung, wenn sie nicht implementiert sind.
size ist die Anzahl zusammenhängender Bytes, die gesperrt oder entsperrt werden sollen. Das zu sperrende oder entsperrende Betriebsmittel beginnt am aktuellen Offset in der Datei und erstreckt sich vorwärts für ein positives size und rückwärts für ein negatives size (die vorhergehenden Bytes bis ausschließlich des aktuellen Offsets). Wenn size null ist, wird der Abschnitt vom aktuellen Offset bis zum größten Datei-Offset gesperrt, d.h. vom aktuellen Offset bis zum gegenwärtigen oder bis zu jedem zukünftigen Dateiende. Ein Bereich braucht nicht einer Datei zugewiesen sein, damit er gesperrt werden kann, weil diese Sperren auch über das Ende der Datei hinausgehen können. Die mit Die Anforderungen von Gesperrte Abschnitte werden durch den ersten
Die Möglichkeit eines Deadlocks entsteht, wenn ein Prozess, der ein gesperrtes Betriebsmittel kontrolliert, durch Anforderung des gesperrten Betriebsmittels eines anderen Prozesses zum Pausieren veranlasst wird. Daher wird bei Aufruf von Das gleichzeitige Sperren mit Das Warten auf ein Betriebsmittel wird mit einem beliebigen Signal unterbrochen. Der Systemaufruf Es besteht kein funktionaler Unterschied zwischen Werden Threads verwendet, so wirkt sich die Funktion auf den Prozess oder auf einen Thread wie folgt aus: Sperren eines Dateiabschnitts; Sperraufrufe von anderen Threads, die versuchen, einen bereits gesperrten Dateiabschnitt zu sperren, führen entweder zur Rückgabe eines Fehlerwerts oder blockieren den aufrufenden Thread solange, bis der Abschnitt freigegeben wird. Alle Sperren für einen Prozess werden aufgehoben, wenn der Prozess beendet wird. | |
Returnwert | 0 | bei Erfolg. |
| -1 | bei Fehler. |
Fehler |
| |
| fildes ist kein gültiger, offener Dateideskriptor, oder function ist | |
| function ist | |
| function ist | |
| Während der Ausführung der Funktion wurde ein Signal abgefangen. | |
| function ist | |
| function function ist | |
| fildes zeigt auf einen Dateityp, der in dieser Implementierung nicht gesperrt werden kann oder | |
| fildes ist auf einem fernen Rechner, und die Verbindung zu diesem Rechner ist nicht mehr aktiv. | |
| Der Offset des ersten Byte oder, wenn die Größe ungleich 0 ist, des letzten Byte im angeforderten Abschnitt, kann in einem Objekt des Typs | |
Hinweise | Unerwartete Ergebnisse können in Prozessen auftreten, die im Adressraum des Benutzers puffern. Der Prozess kann später Daten lesen oder schreiben, die gesperrt sind bzw. waren. Das Standard-E/A-Paket ist die häufigste Ursache für unerwartete Pufferungen. Es sollten statt dessen einfachere Funktionen verwendet werden, die ungepuffert arbeiten, wie z.B Da die Variable Die Funktion | |
Siehe auch |
|