|
Das nachfolgende C/C++ Beispiel demonstriert die Verwendung der von FATS bereitgestellten  Index-Befehle:
/* FATS 02.30 (c) GCS Software, Udo Gertz 1993-1998 Testprogramm (Watcom C) Datei KUNDEN.DAT re-indizieren 19-03-2009 U.Gertz */ #include <stdio.h> #include <io.h> #include <fcntl.h> #include <sys\types.h> #include <sys\stat.h> #include <stdlib.h> #include <string.h> #include <mem.h> #include "FATS.h" struct kdat { char LOESCHKENNZ; char ANREDE[6]; char NAME[26]; char BRANCHE[26]; char STRASSE[26]; char PLZ[6]; char ORT[21]; }; char szCmnd[256]; char szFATSkey[256]; unsigned short uFATSError; unsigned long dwFATSRecno; struct kdat kdata; main () { char cChar; int hKunden; int nIOresult; unsigned long dwRecords = 0L; /* -------> Aktivierung des FATS Cachesystems Standardmäßig ist die Cacheverwaltung ausgeschaltet. Sie können diese mit dem Befehl "Y" Auto Refresh initialisieren. Mit diesem Befehl können Sie vor einer Reorganisation den FATS-Cache mittels "Y\5" oder "Y\106" einschalten, die entsprechende Indexdatei erzeugen oder öffnen und dann die Schlüssel einfügen. Nach Beenden der Reorganisation stellen Sie den ursprünglichen Zustand mit "Y\0", "Y\2" etc. wieder her. Die Operation kann dadurch im günstigsten Fall bis zu 30x schneller ablaufen. Bei der Einstellung "Y\5" werden die Daten nicht sofort nach jedem schreibenden Befehl auf die Platte geschrieben, sondern solange in den FATS internen Cachepuffern behalten, bis diese überlaufen. Beim ersten Schreibzugriff werden jedoch sämtliche zu der jeweiligen Datei gehörende Puffer auf die Platte geschrieben, wodurch die Integrität der Indexdatei garantiert wird. Das Zurückschreiben der Cachepuffer kann auch jederzeit durch den Befehl W (Write Page Map) erreicht werden. Diese Einstellung bringt im günstigsten Fall eine bis zu 30-fache Beschleunigung gegenüber den herkömmlichen Einstellungen ("Y\0" & "Y\2"), es muß jedoch selbst dafür gesorgt werden, daß die Indexdatei bei Beendigung des Programmes mit dem Befehl Close Indexfile (K) geschlossen wird. Als Äquivalent im Netzwerkbetrieb dient der Befehl "Y\106" */ dwFATSRecno = FATSCALL( "Y\\5", &uFATSError, szFATSkey ); /* -------> Datendatei öffnen */ hKunden = open( "KUNDEN.DAT", O_RDWR ); setmode(hKunden, O_BINARY); /* -------> Indexdatei erstellen */ dwFATSRecno = FATSCALL( "C\\KUNDEN.KEY\\25\\3\\A\\1", &uFATSError, szFATSkey ); /* ======================================================================== Indexdatei wiederherstellen ======================================================================== */ do { nIOresult = read( hKunden, &kdata, sizeof( kdata ) ); if ( nIOresult != sizeof( kdata ) ) { break; } dwRecords++; if ( !kdata.LOESCHKENNZ ) { /* "BK" Build Keys Diesem Befehl wird die im Befehl Create Indexfile (C) angegebene Anzahl Schlüssel im Kommandostring übergeben. Die Schlüssel werden in die Indexdatei einsortiert und der Satznummer "RecNo" zugeordnet. Dieser Befehl entspricht dem Befehl Insert Keys (IK), die Daten werden jedoch nicht sofort nach dem Befehl auf die Platte geschrieben, sondern solange in den FATS internen Cachepuffern behalten, bis diese überlaufen. Der Aufbau des Kommandostrings: szCmnd = "BK\{RecNo}\{FileNo}\{KeyStr1}[\{KeyStr2}[\{KeyStr3}]]" RecNo Datensatznummer FileNo Nummer der Indexdatei KeyStr# Schlüssel */ sprintf( szCmnd, "BK\\%lu\\1\\%s\\%s\\%s%s", dwRecords, kdata.NAME, kdata.BRANCHE, kdata.PLZ, kdata.ORT ); } else { /* "DL" Manipulate Deleted List */ sprintf( szCmnd, "DL\\%lu\\S\\1", dwRecords ); } dwFATSRecno = FATSCALL( szCmnd, &uFATSError, szFATSkey ); } while ( !uFATSError ); /* --------> Indexdatei schließen */ dwFATSRecno = FATSCALL( "K\\1", &uFATSError, szFATSkey ); close( hKunden ); }
© 2008 GCS Software, Udo Gertz