Was bedeutet fd-stellen Sie bei der Eingabe: int fd = open("Datei");?
Ich bin auf der Suche im I/O-Operationen in C++ und ich habe eine Frage.
Wenn Sie eine Datei öffnen möchten:
#include <fcntl.h>
int main() {
unsigned char buffer[16];
int fd = open (argv[1], O_RDONLY);
read(fd, buffer, sizeof(buffer));
return 0;
}
Wie kann die variable fd
repräsentieren eine Datei als integer, wenn an die open
Methode? Ist es repesenting eine Datei im aktuellen Ordner? Wenn ich drucken Sie die fdvariable, er druckt 3. Was bedeutet das?
Ps. Ich weiß, es gibt mehrere andere Möglichkeiten, um Dateien zu handhaben, wie stdio.h, fstream sind etc, aber das ist aus dem Anwendungsbereich dieser Frage. Ds.
- Randbemerkung: Wenn du wirklich mit C++,
std::ifstream
wäre das viel bevorzugte Art der Lektüre-Dateien.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein Griff, identifiziert die Datei öffnen; es ist in der Regel als Datei-Deskriptor, daher der name
fd
.Wenn Sie die Datei öffnen, das Betriebssystem stellt einige Ressourcen, die benötigt werden um darauf zuzugreifen. Diese werden gespeichert in einer Art von Datenstruktur (vielleicht ein einfaches array), verwendet einen integer als Schlüssel; der Aufruf
open
gibt die ganze Zahl, so dass, wenn Sie übergeben esread
, den das Betriebssystem verwenden kann es zu finden, die Ressourcen, die es braucht.Ist es, das die Datei, die Sie geöffnet; der Dateiname war
argv[1]
, das erste der Argumente, die übergeben wurde, um das Programm, wenn es gestartet wurde. Wenn diese Datei nicht vorhanden ist, oderopen
aus irgendeinem Grund fehlgeschlagen ist, dann hat es den Wert -1, und Sie stellen nicht eine Datei; Sie sollten wirklich überprüfen, bevor Sie versuchen, etwas zu tun.Es hat keine Besondere Bedeutung; aber es hat Wert, denn es war die vierte Datei (oder Datei-wie Ding), der eröffnet wurde, nachdem der Eingang (0), output (1) und Fehler (2) streams, die verwendet werden
cin
,cout
undcerr
in C++.The user application passes the abstract key to the kernel through a system call
ist es, die Umsetzung deropen
macht die das system nennen? Wo ist die Umsetzung von fcntl.h? Ist es in der glibc?open
,read
usw. Funktionen in glibc und sind kleine Wrapper um die entsprechende system-Aufrufe.Denn das ist der index der Tabelle der Ressourcen gespeichert, die für den aktuellen Prozess.
Jeder Prozess hat seinen eigenen Ressourcen-Tabelle, so dass Sie nur brauchen, um passieren die index
read/write/etc
Funktionaus: http://en.wikipedia.org/wiki/File_descriptor
int sock = socket(...);
?The user application passes the abstract key to the kernel through a system call
ist es, die Umsetzung deropen
macht die das system nennen? Wo ist die Umsetzung von fcntl.h?open() liefert die file-Deskriptor der Datei, die die C-Typ int. Mehr wissen über File-Deskriptor verweisen http://en.wikipedia.org/wiki/File_descriptor.
"fd" steht für file-Deskriptor. Es ist ein Wert der Identifizierung einer Datei. Es ist oft ein index (in der Gesamt-Tabelle), einen offset oder einen Zeiger. Verschiedene APIs verwenden verschiedene Arten. WinAPI, zum Beispiel, verwendet verschiedene Arten von Griffen (GRIFF, HGDI, etc.), das sind im wesentlichen die Typdefinitionen für int/void*/long, und so weiter.
Mit bloßem Typen wie "int" ist in der Regel nicht eine gute Idee, aber wenn die Umsetzung sagt Ihnen, dies zu tun (ähnlich wie die POSIX in diesem Fall), sollte man es auch belassen.
Die vereinfachte Antwort lautet, dass
fd
ist nur ein index in eine Reihe von Datei-Deskriptoren.Wenn die meisten Prozesse sind gestartet, Sie erhalten drei offene Datei-Deskriptoren zu beginnen:
stdin
(0),stdout
(1), undstderr
(2). Also, wenn Sie öffnen Sie Ihren ersten Datei, wird der nächste verfügbare array-Eintrag ist 3.