Detaillierte Erklärung zur Verwendung der Linux-lseek-Funktion

Detaillierte Erklärung zur Verwendung der Linux-lseek-Funktion

Hinweis: Wenn der Artikel Fehler enthält, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank für Ihre Mitarbeit.

Name

Name: lseek - Lese-/Schreibdatei-Offset neu positionieren

Mit der Funktion lseek wird die Verschiebung beim Lesen und Schreiben von Dateien neu positioniert.

Headerdateien und Funktionsdeklarationen

#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t Offset, int woher);

Wenn der Offset positiv ist, bewegt er sich zum Ende der Datei (Vorwärtsbewegung), und wenn er negativ ist, bewegt er sich zum Anfang der Datei (Rückwärtsbewegung).

beschreiben

lseek() positioniert den Dateioffset der mit dem Dateideskriptor fd verknüpften offenen Dateibeschreibung gemäß der Wherece-Direktive wie folgt auf das Argument Offset:
SEEK_SET Der Dateioffset wird auf Offsetbytes eingestellt.
SEEK_CUR Der Dateioffset wird auf den aktuellen Speicherort plus Offsetbytes gesetzt.
SEEK_END Der Dateioffset wird auf die Größe der Datei plus Offsetbytes eingestellt.

Mit lseek() kann der Dateioffset über das Dateiende hinaus gesetzt werden (die Größe der Datei wird dadurch jedoch nicht geändert). Wenn an dieser Stelle später Daten geschrieben werden, geben nachfolgende Lesevorgänge der Daten in der Lücke (einem „Loch“) Nullbytes ('\0') zurück, bis tatsächlich Daten in die Lücke geschrieben werden.

Die Funktion lseek() positioniert die geöffnete Datei neu, wobei die Verschiebung durch die Kombination der Parameter „offset“ und „wherece“ bestimmt wird:

Suchen_Einstellen:
Der Offset beträgt Offset-Bytes vom Anfang der Datei.
SEEK_CUR:
Erhöhen Sie ausgehend von der aktuellen Lese-/Schreibzeigerposition der Datei den Offset um Offset-Bytes.
SUCHEN_ENDE:
Der Dateioffset wird auf die Größe der Datei plus Offsetbytes eingestellt.

Testcode:

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>

#define BUFFER_SIZE 1024
#define SRC_FILE_NAME "Quelldatei"
#define DEST_FILE_NAME "Zieldatei"
//Setze den Offset entsprechend den übergebenen Parametern
#define OFFSET (atoi(args[1])) 

int main(int argc, char*args[]) {
  int Quelldatei, Zieldatei;
  vorzeichenloser Zeichenpuffer [PUFFERGRÖSSE];
  int reale Leselänge, Offset;
  wenn (argc != 2) {
    fprintf(stderr, "Verwendung: %s Offset\n", args[0]);
    Ausgang (-1);
  }
  src_file = öffnen(SRC_FILE_NAME, O_RDONLY);
  dest_file = open(DEST_FILE_NAME, O_WRONLY | O_CREAT, S_IREAD | S_IWRITE ); //Besitzerberechtigung: rw
  if (Quelldatei < 0 || Zieldatei < 0) {
    fprintf(stderr, "Fehler beim Öffnen der Datei!\n");
    Ausgang (1);
  }
  off_set = lseek(src_file, -OFFSET, SEEK_END); //Beachten Sie, dass der Offset hier negiert wird printf("lseek() repositoriton the file offset of src_file: %d\n", off_set);
  während((reale Leselänge = lesen(Quelldatei, Buff, Größe von(Buff))) > 0) {
    schreiben(Zieldatei, Buff, tatsächliche Leselänge);
  }
  schließen(Zieldatei);
  schließen(Quelldatei);
  gebe 0 zurück;
}

Ergebnisinterpretation

Durch Beobachten des Offsets und der Größen der Dateien dest_file und src_file ist es nicht schwer zu erkennen, dass das Programm die Funktion lseek verwendet, um den Dateizeiger src_file an das Ende der Datei + Offset neu zu positionieren (beachten Sie, dass dieses Programm die entgegengesetzte Offsetzahl verwendet, d. h. das Ende der Datei + (-Offset)) und dann beginnt, die Datei vom Ende der Datei + Offset nach dest_file vorwärts zu kopieren.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Beispielerklärung der Alarmfunktion in Linux
  • PHP führt 6 Linux-Befehlsfunktionscodebeispiele aus
  • Detaillierte Erklärung zur Verwendung der Stat-Funktion und des Stat-Befehls in Linux
  • So erhalten Sie die aktuelle Zeit mit der Funktion time(NULL) und localtime() in Linux
  • So fügen Sie einer Python-Funktion unter Linux/Mac ein Timeout hinzu
  • Linux-Unlink-Funktion und wie man Dateien löscht
  • Eine kurze Analyse des Funktionsaufrufprozesses unter der ARM-Architektur

<<:  Beispiel für die Implementierung einer lokalen Fuzzy-Suchfunktion in Front-End-JavaScript

>>:  So erstellen Sie schnell zig Millionen Testdaten in MySQL

Artikel empfehlen

CentOS 7-Methode zum Ändern des Gateways und Konfigurieren des IP-Beispiels

Wählen Sie bei der Installation der CentOS7-Versi...

So vermeiden Sie die URL-Zeitzonenfalle in MySQL

Vorwort Wenn Sie MySQL 6.0.x oder höher (JAR) ver...

Einfaches Webdesign-Konzept – Farbabstimmung

(I) Grundkonzepte der Farbabstimmung auf Webseiten...

Detaillierte Schritte zur Installation von Docker in 5 Minuten

Für die Installation von Docker auf CentOS muss d...

Beispielcode zur Eingabe des Kennzeichens und der Provinzkürzel in html

Das Prinzip besteht darin, zuerst ein Div mit ein...

Warum sollte CSS im Head-Tag platziert werden?

Denken Sie darüber nach: Warum sollte css im head...

Vue implementiert das Hinzufügen von Wasserzeichen zu hochgeladenen Bildern

In diesem Artikel wird der spezifische Implementi...

Was Sie über das Erstellen von MySQL-Indizes wissen müssen

Inhaltsverzeichnis Vorwort: 1. Indexmethode erste...

Eine eingehende Analyse von MySQL erläutert die Verwendung und die Ergebnisse

Vorwort Bei unserer täglichen Arbeit führen wir m...

Linux-Dateisysteme erklärt: ext4 und darüber hinaus

Heute werde ich Sie durch die Geschichte von ext4...

Erste Schritte mit MySQL - Konzepte

1. Was ist das? MySQL ist das beliebteste relatio...

So kapseln Sie Axios in Vue

Inhaltsverzeichnis 1. Installation 1. Einleitung ...

Erläuterung der Lösung zur mobilen H5-Bildgenerierung in JavaScript

Derzeit gibt es viele Betriebsaktivitäten für öff...