C fcntl Funktionsverbrauch

C fcntl Funktionsverbrauch
Wie der Name angibt, dass FCNTL als "Datei" -Kontrolle abgekürzt wird. Es bedeutet, dass es auf dem Dateibehandlungsprozess basiert. Der FCNTL ist ein Systemaufruf. Es ermöglicht das Programm, eine Lektüre oder ein Schreibschloss zu platzieren. Diese Funktion kann verwendet werden, um die Dateieigenschaften zu ändern, die entweder bereits geöffnet werden oder durch jede darauf eingesetzte Aktion geöffnet werden können. Es ist eine vielseitige Funktion und wird verwendet, um Dateien auf viele Arten zu ändern, z. B. Öffnen, Lesen und Schreiben usw. In diesem Artikel geht es um die Steuerfunktionen in Dateien.

Fcntl in Linux

Im Linux -Betriebssystem erfolgt der FCNTL -Aufruf über die Deskriptoren. Zum Beispiel wird ein Leseschloss auf einem lesbaren Dateideskriptor platziert, und ein ähnlicher Fall ist für die Schreibschloss. Ein Dateideskriptor repräsentiert die Dateinummer, die geöffnet wird. Es ist bequem, dass das Programm sich daran erinnert, an welcher Datei es arbeitet. Wenn wir eine Datei öffnen, wird der Datei in der Deskriptor -Tabelle der Prozessdatei die Datei nicht bereits zugewiesen und frei ist und frei ist. Und im Falle des Schließens einer Datei wird diese zugewiesene Nummer aus der Deskriptorentabelle des Prozesses entfernt.

Syntax

#enthalten
int fcntl (Integer Deskriptor, Ganzzahl CMD)

Erstens definieren wir die FCNTL -Bibliothek, um den Prozess leicht zu erreichen. Der Funktionsaufruf enthält hauptsächlich zwei Argumente im Parameter. Einer ist der Deskriptor, wie oben definiert; Es definiert die Datei, auf die der Kontrollbefehl angewendet werden soll. Mit anderen Worten, auf denen die Attribute geändert werden müssen. Der zweite ist der Befehl, der auf die angegebenen Deskriptoren angewendet wird.

Wie FCNTL Dateieigenschaften ändert

FCNTL -Funktion wird für fünf verschiedene Zwecke verwendet, hauptsächlich einschließlich Duplikation, Einstellungsflags usw.; Jeder wird hier im Detail beschrieben.

CMD = F_DUPFD

Duplizieren Sie den Deskriptor von Dateien. Der neue doppelte Wert wird an die Funktion zurückgegeben. Dieser Wert ist der niedrigste, der nicht bereits geöffnet oder einem anderen Deskriptor zugeteilt wird. Es wird immer als Ganzzahl angenommen, und der Wert ist immer größer als das dritte Argument. Darüber hinaus hat der doppelte Wert seine Dateideskriptor -Flags. Der neue Deskriptor hat den gleichen Eintrag in der Tabelle wie der ursprüngliche Deskriptor.

Cmd = getfd

Diese Funktion hat die Spezialität, die Flags des Deskriptors als Funktionswert zurückzugeben. Wie der Name anzeigt, erhalten wir das Flag, nachdem wir es festgelegt haben.

Cmd = setfd

Mit dieser Funktion wird diese Funktion verwendet, um das Flag des Deskriptors festzulegen. Das Programm hat das Flag entweder auf 0 gesetzt, nicht auf EXEC oder 1 geschlossen, um den Exec zu schließen.

Cmd = f_getfl

Diese Funktion gibt die Flags für den Dateistatus als Wert einer Funktion zurück. Wenn der Status für das Flag als offenes Flag beschrieben wird, beschreiben wir die Statusflags.

Cmd = f_setfl

Es legt das Statusflag auf die Datei fest. Da GETFL verwendet wird, um den Dateistatus zurückzugeben.

Cmd = f_getown

Diese Funktion hängt mit der Prozessidentität zusammen, wenn sie die Prozess -ID und die Prozessgruppen -ID zurückgibt.

Cmd = f_setown

Diese Funktion neigt dazu, Prozess -ID oder Gruppenprozess -ID zu erstellen und festzulegen.

Der Rückgabewert aus dem FCNTL hängt vom verwendeten Befehl ab. Wenn Befehle auf einen Fehler stoßen, gibt es -1 zurück. Wenn jede Funktion kein Problem unterliegt, wird ein anderer Wert außer -1 zurückgegeben. Während im Fall von F_Getown die zurückgegebene ID ein positiver Wert oder ein negativer Wert sein kann.

Jetzt werden wir hier einige elementare Beispiele hinzufügen. Um die Codes von FCNTL zu implementieren, müssen Sie einen Texteditor und einen Linux -Terminal haben, um den resultierenden Wert zu erhalten.

Beispiel 1

Betrachten Sie ein Beispiel, in dem wir eine neue Zeile in einer Beispieltextdatei erstellt und dann geschrieben haben. In diesem Beispiel wird die Beteiligung von FCNTL als Funktion nicht verwendet. Die Funktionen dieser Funktion werden nur mit einer Bibliothek im Code implementiert.

#enthalten

Wir schreiben eine Zeichenfolge in den Code, daher müssen wir die String -Bibliothek verwenden. Wir haben hier eine Reihe von Dateideskriptoren genommen. Darüber hinaus wurde ein Charakter -Array entnommen, das direkt mit einer Zeichenfolge einiger Zeichen initialisiert wird. Mit Hilfe des Dateideskriptors verwenden wir einige Dateioperationen des Datei -Flag -Status wie Lesen und Schreiben in der Datei usw. Wenn die Datei bereits erstellt wurde, müssen Sie sie öffnen und die Zeichenfolge darin schreiben.

Fd [0] = offen ("Probe.txt ", o_rdwr);

Diese Anweisung öffnet die Datei mit dem Namen 'Beispiel.TXT 'mit der O_RDWR -Flag. Um die Zeichenfolge früher hinzuzufügen, wird sie in die Datei eingegeben.

Write (fd [0], bf1, strlen (buf1));

Durch die Read-Option wird die Zeichenfolge in der Ausführung des Code aus der Datei angezeigt. Beide Dateideskriptoren sind am Ende geschlossen.

Nach dem Speichern der Datei werden wir einen GCC -Compiler für die Ausführung der Datei verwenden.

$ gcc -o Dateidatei.C
$ ./Datei

Wenn der Code ausgeführt wird, werden Sie feststellen, dass eine Zeichenfolge angezeigt wird, die wir im Code in eine Datei geschrieben haben. Diese Anweisung wurde aus der Datei abgerufen. Wenn Sie zu den Dateien in Ubuntu gehen, sehen Sie das Beispiel.TXT -Datei. Sie werden feststellen, dass die Zeichenfolge zum Öffnen der Datei in der Datei über den Code geschrieben ist.

Beispiel 2

Dies ist ein Beispiel für den Befehl F_Getfl. Es gibt das Dateistatus -Flag als Funktionswert zurück. Zunächst wird die Datei geöffnet; Wenn es noch nicht erstellt ist, erstellt O_Creat die Datei. Erstens werden all diese Flag -Statusfunktionen unten angegeben, damit es leicht zu verstehen ist.

O_RDONLY: Diese Funktion öffnet die Datei nur für den Lesezweck.

O_wronly: befasst sich nur mit dem Schreibzweck.

O_RDWR: Es ist auch für den Lese- und Schreibprozess.

O_Append: Fängt jede Schreibfunktion in der aktuellen Datei an.

Dies sind die Hauptflagge, die im Beispiel verwendet wird. Zurück zum Beispiel, wenn der zurückgegebene Wert durch Öffnen der Datei weniger als 0 beträgt, wird eine Fehlermeldung angezeigt.

Nach dem Öffnen müssen Sie die Datei erhalten. Wenn der Status der Datei -1 ist, wird eine Fehlermeldung angezeigt. Andernfalls wird der Dateistatus empfangen. Mit Hilfe des Zugriffsmodus erhalten wir nun das Flag des Dateideskriptors. Alle Optionen werden über die IF-ELSE-Anweisung überprüft. Die Option entsprechend dem Dateistatus hat sich jeweils entschieden. Wenn der Dateideskriptorstatus am Ende größer als 1 ist, bedeutet dies, dass die Datei jetzt geschlossen ist.

Den Code kompilieren; Sie werden feststellen, dass alle Anweisungen gemäß dem FD -Status angezeigt werden, entweder die Datei wird geöffnet oder geschlossen.

Abschluss

Der Artikel 'C: FCNTL -Funktionsnutzung' enthält die Funktionen der FCNTL -Funktion. Der Dateideskriptor spielt eine wichtige Rolle im Dateibehandlungsprozess in Bezug auf eine Funktion. Wir haben auch einige Flag -Beispiele verwendet, um beim Lesen und Schreiben in die Datei. Beide hier erläuterten Beispiele sind für Sie bei der Verwendung von FCNTL in der C -Programmiersprache hilfreich.