Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

flockfile, ftrylockfile, funlockfile - Funktionen zum Sperren der Standardein/-ausgabe

&pagelevel(4)&pagelevel

Definition

#include <stdio.h>

void flockfile(FILE *file);

int ftrylockfile(FILE *file);

void funlockfile(FILE *file);

Beschreibung

Die Funktionen flockfile() und ftrylockfile() ermöglichen ein explizites Sperren von (FILE*)-Objekten auf Anwendungsebene. Mit funlockfile() kann die Sperre wieder aufgehoben werden. Diese Funktionen können von einem Thread verwendet werden, um eine Folge von E/A-Anweisungen darzustellen, die als Einheit ausgeführt werden sollen.

Die Funktion flockfile() wird von einem Thread verwendet, um das Zugriffsrecht auf ein (FILE*)-Objekt zu erlangen.

Die Funktion ftrylockfile() wird von einem Thread verwendet, um das Zugriffsrecht auf ein (FILE*)-Objekt zu erlangen, wenn das Objekt verfügbar ist; ftrylockfile() ist eine Version von flockfile(), bei der keine Blockierung erfolgt.

Die Funktion funlockfile() wird verwendet, um das an den Thread vergebene Zugriffsrecht aufzuheben. funlockfile() wird ignoriert, wenn der aufrufende Thread nicht der Besitzer des (FILE*)-Objekts ist.

Logisch ist jedem (FILE*)-Objekt ein Sperrenzähler zugeordnet. Dieser Zähler wird implizit mit dem Wert 0 initialisiert, wenn das (FILE*)- Objekt erstellt wird. Die Sperre für das (FI-LE*)-Objekt wird aufgehoben, wenn der Zähler den Wert 0 hat. Wenn der Zähler positiv ist, ist ein einzelner Thread Eigentümer des (FILE*)-Objekts. Wird die Funktion flockfile() aufgerufen, wenn der Zähler 0 ist oder einen positiven Wert hat und der Aufrufer Eigner des (FILE*)-Objekts ist, so wird der Zähler erhöht. Andernfalls wird der aufrufende Thread unterbrochen und wartet, dass der Zähler wieder den Wert 0 erhält. Jeder Aufruf von funlockfile() vermindert den Zähler. Dies ermöglicht das Verschachteln zusammengehöriger Aufrufe von flockfile() [oder erfolgreicher Aufrufe von ftry-lockfile()] und funlockfile().

Alle Funktionen, die auf (FILE*)-Objekte verweisen, verhalten sich, als ob sie intern fflockfile() und funlockfile() verwendeten, um das Zugriffsrecht auf diese (FILE*)-Objekte zu erhalten.


0

x

Returnwert

flockfile() und funlockfile():

 


Kein Returnwert

 

ftrylock():

 

0

bei Erfolg.

 

!=0

wenn keine Sperre aktiviert werden kann.

Hinweise

Bei Echtzeitanwendungen kann es durch die Verwendung von FILE-Sperren zur Umkehrung von Prioritäten kommen. Das Problem tritt auf, wenn ein Thread hoher Priorität ein FILE-Objekt „sperrt“, das gerade von einem Thread niedriger Priorität „entsperrt“ wird, aber der Thread niedriger Priorität wird von einem Thread mittlerer Priorität vorzeitig angehalten. Diese Situation führt zur Umkehrung der Prioritäten; ein Thread hoher Priorität wird von Threads niedrigerer Priorität für unbegrenzte Zeit blockiert.

Entwickler von Echtzeitanwendungen müssen beim Systemdesign die Möglichkeit derartiger Umkehrungen von Prioritäten berücksichtigen. Sie können eine Reihe von Gegenmaßnahmen gegen derartige Situationen treffen, indem beispielsweise kritische Codeabschnitte, die durch FILE-Sperren geschützt werden, mit hoher Priorität ausgeführt werden, so dass ein Thread während der Ausführung kritischer Codeabschnitte nicht vorzeitig angehalten werden kann.

Siehe auch

getc_unlocked(), pthread_intro(), stdio().