Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Was bedeutet Linux EOF?

Was bedeutet Linux EOF?

藏色散人
藏色散人Original
2023-03-25 09:20:092517Durchsuche

linux eof bezieht sich im Allgemeinen auf das Ende der Datei. EOF ist die Abkürzung für „End Of File“ (Ende der Datei). Im Betriebssystem bedeutet dies, dass die Datenquelle am Anfang keine Daten mehr zum Lesen hat Drücken Sie in einer neuen Zeile die Tastenkombination „Strg+D“, um EOF darzustellen.

Was bedeutet Linux EOF?

Die Betriebsumgebung dieses Tutorials: Linux5.9.8-System, Dell G3-Computer.

linux eof was bedeutet das?

EOF ist ein Computerbegriff, der im Betriebssystem für „End Of File“ steht und bedeutet, dass die Datenquelle keine Daten mehr zum Lesen hat. Unter Linux bezieht es sich im Allgemeinen auf das Ende der Datei.

Wie kann ich mit EOF feststellen, ob das Programm das Ende der Datei gelesen hat?

Eine sehr wichtige Idee im Linux-System ist: Alles ist eine Datei. Unabhängig davon, ob es sich um eine Standardeingabe, eine normale Textdatei im Dateisystem oder einen Netzwerkstream handelt, können sie als Dateien betrachtet und über die Lese-/Schreibfunktion gelesen und geschrieben werden. Daher verfügen verschiedene Dateitypen über unterschiedliche Methoden, um festzustellen, ob das Ende der Datei gelesen wurde. Das Folgende ist eine

  • normale Textdatei

  • Standardeingabedatei (STDIN)

  • Socket-Stream-Datei

Diese drei Dateitypen führen Methoden ein, um festzustellen, ob sie bis zum Ende der Datei gelesen wurden.

Gewöhnliche Textdateien

Die gewöhnlichen Dateien beziehen sich hier auf die Textdateien, die wir normalerweise über den Dateimanager sehen. Sie existieren im Dateisystem in Linux und die Dateigröße ist festgelegt.

Für diese Art von Datei bestimmt das Linux-System wie folgt, ob eine normale Textdatei bis zum Ende der Datei gelesen wurde: Die Lesefunktion verwaltet einen Lesezeiger für die geöffnete Datei und subtrahiert diesen Zeiger dann vom Zeiger Wert am Anfang der Datei. Ermitteln Sie einen Byte-Offset relativ zum Dateianfang und vergleichen Sie schließlich den Byte-Offset mit der Größe der Datei selbst, wenn der Byte-Offset relativ zum Dateianfang größer ist der Datei selbst. Anschließend wird eine EOF-Konstante zurückgegeben, die angibt, dass das Ende der Datei gelesen wurde.

Wenn also eine Datei gemäß der obigen Beschreibung n Zeichen enthält, wird die interne Operation der while-Schleife n+1 Mal ausgeführt. Daher ist die sicherste Art, es zu schreiben, wie folgt:

int c = fgetc(fp);
while (c != EOF) {
    do something;
    c = fgetc(fp);
}
if (feof(fp)) {
    printf("\n End of file reached.");
} else {
    printf("\n Something went wrong.");
}

Standardeingabedatei

Standardeingabedatei (stdin) Entspricht der peripheren Tastatureingabe und wird im Linux-System in eine Datei abstrahiert, genau Es soll eine Stream-Datei sein. Der größte Unterschied zwischen dieser Art von Datei und der oben genannten normalen Textdatei besteht darin, dass ihre Dateigröße nicht festgelegt ist. Sie ähnelt dem Einlassende einer Wasserleitung und kann jederzeit Eingaben empfangen.

Gerade aufgrund der Streaming-Eigenschaften der Standardeingabedatei ist es unmöglich zu beurteilen, ob das Ende der Datei durch die oben erwähnte Dateigrößenvergleichsmethode gelesen wurde. Daher bestimmt das Linux-System, ob die Standardeingabedatei bis zum Ende der Datei gelesen wurde, indem es eine spezielle Eingabemarkierung setzt, um das Ende der Datei anzuzeigen. Im Linux-System ist diese Markierung die Tastenkombination Strg+ D. Wenn das System diese Tastenkombination erfasst. Lassen Sie die r-Lesefunktion eine EOF-Konstante zurückgeben, um das Programm darüber zu informieren, dass es bis zum Ende der Standarddatei gelesen hat.

Socket-Stream-Datei

Socket-Stream-Datei ähnelt einer Standard-Eingabedatei und liest Daten aus dem Netzwerk. Daher gelten die beiden oben genannten Methoden zur Beurteilung, ob die Datei bis zum Ende gelesen wurde, nicht für Socket-Stream-Dateien.

Wie stellt der Clientprozess fest, ob der Serverprozess mit dem Schreiben aller Daten fertig ist?

Wenn der Client-Prozess in der Socket-Stream-Datei die vom Remote-Server-Prozess über die Lesefunktion gesendeten Daten liest, verwendet er blockierende E/A zum Lesen. Solange die Verbindung zwischen Client und Server nicht getrennt wird und der Server keine Daten in den Socket schreibt, wird der Lesevorgang des Clients blockiert, bis neue Daten auf den Server geschrieben werden.

Wenn der Serverprozess die Socket-Verbindung schließt, empfängt der Client ein vom Server gesendetes TCP-Protokoll-FIN-Paket, und dann wird die Lesefunktion im Clientprozess aktiviert, die ursprünglich blockiert war und auf den Empfang von Daten vom Serverprozess wartete up und gibt einen Wert von 0 zurück. Dies unterscheidet sich ein wenig von der Situation, in der die beiden zuvor erwähnten Dateitypen EOF (Wert ist -1) zurückgeben, nachdem sie das Ende der Datei gelesen haben. Daher wird beim Lesen aus dem Socket im Programm das Flag zur Beurteilung des Endes verwendet des Datenstroms ist nicht -1, sondern 0. .

Unter Linux bedeutet das Drücken von Strg-D am Anfang einer neuen Zeile EOF (wenn Sie Strg-D in der Mitte einer Zeile drücken, bedeutet dies, dass der Pufferbereich „Standardeingabe“ ausgegeben wird, Sie müssen also zweimal drücken mal Strg-D); in Windows bedeutet Strg-Z EOF. (Übrigens bedeutet das Drücken von Strg-Z unter Linux, den Prozess zu unterbrechen und im Hintergrund anzuhalten. Mit dem Befehl fg können Sie wieder in den Vordergrund wechseln; das Drücken von Strg-C bedeutet, dass der Prozess beendet wird.)

那么,如果真的想输入Ctrl-D怎么办?这时必须先按下Ctrl-V,然后就可以输入Ctrl-D,系统就不会认为这是EOF信号。Ctrl-V表示按”字面含义”解读下一个输入,要是想按”字面含义”输入Ctrl-V,连续输入两次就行了。

所以,一个简单的从 socket 文件读取数据的样例代码,通常是下面这样的:

char recvline[MAX_LINE_LENGTH];
int read_count;
while ((read_count = read(sock_fd, recvline, MAX_LINE_LENGTH)) > 0)
{
    printf("%s\n", "String received from server: ");
    fputs(recvline, stdout);
}

总结

所以,一定要记住这样一个概念:EOF 是一个常量而不是一个字符!。

推荐学习:《linux视频教程

Das obige ist der detaillierte Inhalt vonWas bedeutet Linux EOF?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Was ist der Linux-Befehl make?Nächster Artikel:Was ist der Linux-Befehl make?