was ist ein Datei-handle, und wo ist es sinnvoll, für einen Programmierer?
Bin ich das lernen von Assembler zusammen mit C. dieses neue Kapitel begann ich Gespräche über 'Datei-handles", Datei-handles für die Bildschirm-und Datei-handles für die Tastatur-Eingabe etc. Ich weiß nicht, was ist ein Dateihandle? Ich beziehe mich auf IBM PC ASSEMBLY LANGUAGE PROGRAMMING von Peter Abel
- en.wikipedia.org/wiki/Handle_%28computing%29
- Das Unix-äquivalent ein "file descriptor". Es ist genau das gleiche Konzept (eine ganze Zahl, können Sie dem kernel übergeben, wo Sie weiß um die bereits geöffnete Datei). en.wikipedia.org/wiki/File_descriptor
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein Allgemeines Konzept, allgemein als ein "Griff" in den Kontext von computer-software-APIs. In den Kommentaren haben Sie wahrscheinlich gefunden, ein link auf die Wikipedia-Artikel zu diesem Thema.
Sind Sie den Umgang mit einer spezifischen Implementierung eines Daten-Typ -- die IBM-PC/DOS-Datei-handles zurückgegeben, die von der
int 0x21
- Schnittstelle. Wenn Sie möchten, um mehr zu erfahren über diese speziellen Datei-handles, möchten Sie vielleicht zu konsultieren das Buch Undokumentierte DOS, der die details der in-memory-Daten-Strukturen, die es erlauben, Sie zu untersuchen, diese Griffe weiter.Andere spezifische Art von Griff ist die Datei-Deskriptor zurückgegeben, die von der POSIX-standard-Schnittstelle namens
open()
. Diese Funktion ist implementiert in C run-time Bibliothek auf Plattformen wie Linux, Windows NT, Mac OS und viele andere Systeme. Die ganze Zahl zurückgegeben, die von einem Aufrufopen()
kann keine negative Zahl sein.Es sei denn, Sie laufen unter DOS, die Datei-handles sind wahrscheinlich von der Windows-NT-Betriebssystem. Diese Datei-handles zurück
CreateFile()
(zum öffnen als auch erstellen von Dateien), und nur ein Ungültiger Wert für einen Griff an die von dieser Funktion zurückgegeben wirdINVALID_HANDLE_VALUE
. I. e., die Windows-NT-API zurückgeben kann, was als (über Gießen) eine "negative" Ganzzahl sein, obwohl es die Datei geöffnet hat.In allen diesen Fällen, die Datei-handle wird verwendet, um auf einige Daten-Struktur, die verfolgt, wie die Datei geöffnet ist. Eine wichtige Sache, die verfolgt wird, ist die aktuelle Datei position. Die position oder Zeiger ist in POSIX durch die
lseek()
- Funktion und Lesen Sie dietell()
Funktion. Alleread()
oderwrite()
erfolgt aus der position der aktuellen Datei-Zeiger.Deinem Programm öffnen kann dieselbe Datei unter zwei unterschiedlichen Griffen. In diesem Fall wird die Datei Zeiger für jeden Griff ist ausgeprägt. Aktualisierung der Dateizeiger des einen handle mit
lseek()
keinen Einfluss auf die Datei-Zeiger von der anderen Griff, um die gleiche Datei.Einem Datei-handle ist ein ganzzahliger Wert, der verwendet wird, um die Adresse einer Datei öffnen. Solche Griffe sind sehr Betriebssystem-spezifisch, aber auf Systemen, die Unterstützung der open () - Aufruf erstellen Sie eine Kurbel wie diese:
Können Sie dann den Griff mit read/write-Aufrufe. Die nicht-Portabilität der Griffe bedeuten, dass die meisten Menschen Sie zu vermeiden und stattdessen die stream Bibliothek-Funktionen in C, wie z.B. fopen, fread, fwrite, etc.
open()
funktioniert genauso gut unter Windows NT (ohne cygwin), da es nicht unter Linux.Griff ist etwas, das der kernel intern verwendet wird, um Zugriff auf einige Ressourcen. Nur der kernel der wirklich weiß, was es bedeutet, der user-Prozess ist nur gesagt, was Sie Wert zu verwenden, wenn es will, auf diese Ressource zuzugreifen. Sie haben einen weiteren Vorteil, die Datei-handles von Prozessen gemeinsam genutzt werden - in der Erwägung, dass können Sie nicht tun dies mit Zeigern.
Windows verwendet, verarbeitet alle über dem Platz... - Dateien, bitmaps gerätekontexte, Schriften, etc.