Programmieren mit C++

Borland C++

32-Bit-Programmierung

Bis zu 255 offene Dateien

Wie kann die Anzahl der Datei-Handles unter DPMI32 erhöht werden?

Mehr Datei-Handles unter DPMI32

Ohne die OWL-Library komplett neu aufzubauen, können zunächst nur 128 Dateien gleichzeitig offen sein. Dazu muß eine neue Datei dem Projekt hinzugefügt werden, in der _NFILE_ auf den neuen Wert 128 gesetzt wird.

#include 
#include 
#include 
#include <_nfile.h>
 
#undef _ NFILE_ 
#define _NFILE_ 128

Die nachfolgenden Zeilen sorgen dann dafür, daß der Startup-Code alles korrekt initialisiert:

extern void _RTLENTRY _init_handles(void);
extern void _RTLENTRY _init_streams(void);
#pragma startup       _init_handles 4
#pragma startup       _init_streams 5
 
unsigned _RTLENTRY _EXPDATA _nfile = _NFILE_;
 
unsigned int _RTLENTRY _openfd[_NFILE_] =
{
        O_RDONLY | O_TEXT | O_DEVICE,
        O_WRONLY | O_TEXT | O_DEVICE,
        O_WRONLY | O_TEXT | O_DEVICE
};
 
unsigned int _RTLENTRY _pidtab[_NFILE_];
unsigned long _RTLENTRY _handles[_NFILE_];
 
#define _F_STDIN        (_F_READ | _F_TERM | _F_LBUF)
#define _F_STDOUT       (_F_WRIT | _F_TERM | _F_LBUF)
#define _F_STDERR       (_F_WRIT | _F_TERM)
 
FILE    _RTLENTRY _EXPDATA _streams [_NFILE_] =
{
        { NULL, NULL, 0, 0, 0, _F_STDIN,  0, 0, 0 },
        { NULL, NULL, 0, 0, 0, _F_STDOUT, 0, 1, 0 },
        { NULL, NULL, 0, 0, 0, _F_STDERR, 0, 2, 0 }
};

Lösung

Wie können bis zu 255 Dateien geöffnet werden?

255 offene Dateien

Wenn unter DPMI32 mehr als 128 Dateien geöffnet werden sollen, muß in der Datei stdio.h in der Struktur file der Datei-Deskriptor fd vom Datentyp char auf unsigned char geändert werden. Anstatt „char fd“ muß es also heißen „unsigned char fd“.

Anschließend muß die komplette RTL-Bibliothek neu aufgebaut werden.

Lösung





Sachgebiet


© 2009-2012 by Alojado Publishing. Alle Rechte vorbehalten. Ausgewiesene Marken gehören ihren jeweiligen Eigentümern.
Mit der Benutzung dieser Seite erkennen Sie die Nutzungsbedingungen und die Datenschutzerklärung an. Der Betreiber übernimmt keine Haftung für den Inhalt verlinkter externer Internetseiten.
Seite erzeugt 2012-05-20 01:20:00 von textarchiv.alojado.de