Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Detaillierte Einführung in Dateideskriptoren und Dateizeiger unter Linux

Detaillierte Einführung in Dateideskriptoren und Dateizeiger unter Linux

黄舟
黄舟Original
2017-06-02 09:56:111788Durchsuche

In diesem Artikel werden hauptsächlich detaillierte Informationen zu Dateideskriptoren und Dateizeigern unter Linux vorgestellt. Freunde in Not können sich auf

Dateideskriptoren unter Linux-Deskriptoren und Dateizeiger beziehen

Dateikennung:

Lassen Sie uns zunächst verstehen, was eine Dateikennung ist?

Dateibeschreibung Ein Symbol ist ein Begriff in der Informatik ein abstraktes Konzept, das verwendet wird, um eine Referenz einer Datei auszudrücken.

Unter Linux speichert jeder Prozess eine Dateideskriptortabelle im Prozesskontrollblock (PCB). Der Dateideskriptor ist der Index dieser Tabelle. Es gibt einen

Zeiger auf die bereits geöffnete Datei.

Jeder Linux-Prozess sollte drei Standard-Dateideskriptoren haben, die drei Standard-Streams entsprechen.

Integer
整数 名称 (unistd.h)符号常量 (stdio.h)文件流
0 Standard input STDIN_FILENO stdin
1 Standard output STDOUT_FILENO stdout
2 Standard error STDERR_FILENO stderr
Wert
Name (unistd.h)Symbol Konstante

(stdio.h) Dateistream
0 Standardeingabe STDIN_DATEI
NEIN
stdin
1 Standardausgabe STDOUT_FILENO stdout
2 Standardfehler STDERR_FILENO stderr
Der Dateideskriptor ist Formal handelt es sich um eine nicht negative Ganzzahl. Tatsächlich handelt es sich um einen Indexwert, der auf die vom Kernel für jeden Prozess verwaltete Datensatztabelle der vom Prozess geöffneten Dateien verweist. Wenn ein Programm eine vorhandene Datei öffnet oder eine neue Datei erstellt, gibt der Kernel einen Dateideskriptor an den Prozess zurück. Bei der Programmierung dreht sich ein Teil der Low-Level-Programmierung häufig um Dateideskriptoren. Das Konzept der Dateideskriptoren ist jedoch häufig nur auf Betriebssysteme wie UNIX und Linux anwendbar.


Vorgänge im Zusammenhang mit Dateideskriptoren:

Funktion
Operation
Dateideskriptorgenerierung open(), socket() , pipe() usw.
Vorgänge im Zusammenhang mit einem einzelnen Dateideskriptor read(), write(), send

(), fchmod

() usw.
Operationen im Zusammenhang mit mehreren Dateideskriptoren select(), poll() usw .
Vorgänge im Zusammenhang mit der Dateideskriptortabelle close(), dup() usw .

功能 操作
文件描述符生成 open()、socket()、pipe()等
与单一文件描述符相关的操作 read()、write()、send()、fchmod()等
与复数文件描述符相关的操作 select()、poll()等
与文件描述符表相关度的操作 close()、dup()等
Dateizeiger:


Der Dateizeiger ist der, den wir in
verwenden C-Sprache

Was ich gelernt habe, ist, dass in der C-Sprache eine Zeiger-

-Variable verwendet wird, um auf eine Datei zu zeigen. Dieser Zeiger wird als Dateizeiger bezeichnet. Über den Dateizeiger können wir verschiedene Vorgänge an der Datei ausführen, auf die verwiesen wird. Die C-Sprache verwendet Dateizeiger anstelle von Dateideskriptoren als I/O-Handles. Der Dateizeiger zeigt auf eine Datenstruktur namens FILE-Struktur im Benutzerbereich des Prozesses. Die FILE-Struktur enthält einen Puffer und einen Dateideskriptor. Der Dateizeiger ist ein gängiges Format der C-Sprache und daher relativ einfacher zu übertragen.

Normalerweise erhalten wir den Dateizeiger:

Holen Sie sich den Zeiger später , können wir die Informationen des Dateideskriptors im Zeiger erhalten.

FILE *fp = fopen("test.txt","r");
Der Dateideskriptor ist eindeutig, aber der Dateizeiger ist nicht eindeutig. Das

Objekt

, auf das der Dateizeiger zeigt, ist eindeutig.

Konvertierung von Dateideskriptoren und Dateizeigern:

Der erste Parameter von fdopen ist ein offener Dateideskriptor, und mode gibt die Öffnungsmethode an

String
int fileno(FILE *stream);

FILE *fdopen(int fd,const char *mode);
, dasselbe wie fopen, z. B. „w“ oder „r“.

filenoFunktion

, die den dem Dateistream entsprechenden Dateideskriptor zurückgibt, ist fehlgeschlagen. Rückgabe -1.

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in Dateideskriptoren und Dateizeiger unter Linux. 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