![]() Home Grundsätzliches Installation Konfiguration Erste Schritte Laufzeitschalter Textdateien Systemfunktionen Tabellenfunktionen Indexfunktionen Volltext-Indizierung Memos und Blobs Semaphoren-Konzept Support Datenbank Einführungskurs |
SystemfunktionenFolgende Funktionen werden hier besprochen:
AllgemeinesUm systemübergreifend programmieren zu können, können alle Verzeichnisangaben im Unix-Format angegeben werden (also /home/tdbengine/test.prg statt home\tdbengine\test.prg unter Windows). Beachten Sie bitte, daß unter Unix Groß-/Kleinschreibung in Dateinamen unterschieden wird. Unser Tip: verwenden Sie nur Kleinbuchstaben und keine Sonderzeichen in Dateinamen, dann sind Ihre Anwendungen sicher von einer Plattform auf die andere portierbar.Bitte beachten Sie, daß CGI-Programme normalerweise immer nur die Rechte des (in den meisten Fällen) anonymen Internet-Anwenders haben. Diesen muß also im Verzeichnis, in dem die CGI-Programme liegen, und im Verzeichnis der tdbengine wenigstens das Ausführungsrecht und das Leserecht eingeräumt werden. Wird mit Datenbanken gearbeitet, so muß entsprechend deren Zugriffen (nur lesend, lesend und schreibend) im Datenbank-Verzeichnis die Rechtegabe erfolgen. Selbst wenn keine neuen Tabellen angelegt werden sollen, so erfordert eine eventuelle Volltext-Indizierung auch das Recht, Dateien anzulegen. Obwohl es den Sicherheitsaspekten des Internets nicht so ganz entspricht, ist es im Falle der CGI-Programmierung gebräuchlich, im CGI-Verzeichnis (und in den darunterliegenden Verzeichnissen) dem anonymen Internet-Anwender alle Rechte einzuräumen. Selbstverständlich darf das Verzeichnis via Anonymous-ftp niemals freigegeben werden! Damit übernehmen Sie als CGI-Programmierer eine ganze Menge Verantwortung, denn der Internet-Anwender kann alle Programme ausführen, die hier vorliegen. Sie müssen also daür sorgen, daß
Das aktuelle Verzeichnis ermittelnGetDir(Laufwerknummer : REAL) : stringGetDir liefert das aktuelle Verzeichnis. Ist die Laufwerknummer 0, so
wird das aktuelle Verzeichnis des aktuellen Laufwerks geliefert. Unter
Hinweis: Die tdbengine wechselt immer in das Verzeichnis,
in dem das auszuführende prg-File ist.
Anlegen und Löschen von VerzeichnissenMakeDir(Dir : STRING) : REALLegt ein Verzeichnis an, falls der Anwender das Recht dazu hat. Konnte das Verzeichnis angelegt werden, so liefert die Funktion 0, andernfalls den Fehlercode des Betriebssystems. DelDir(Dir : STRING) : REAL Löscht das angegebene Verzeichnis, falls der Anwender das Recht
dazu hat. Es können nur leere Verzeichnisse gelöscht werden.
Die Funktion liefert 0, wenn das Verzeichnis gelöscht wurde, andernfalls
den Fehlercode des Betriebssystems.
Verzeichnis wechselnChDir(Dir : STRING) : REALWechselt in das Verzeichnis. Liefert 0, wenn der Wechsel erfolgreich
war, andernfalls den Fehlercode des Betriebssystems.
Suche in VerzeichnissenFirstDir(Pfad,Option : STRING) : STRINGNextDir : STRING Der Pfad ist eine Verzeichnisangabe, in der auch Wildcards erlaubt sind. Unter Unix sind auch erweiterte Muster der Form "*abc" möglich. Die Option wird nur unter Windows ausgewertet. Es handelt sich dabei um einen String mit einer Kombination folgender Zeichen:
Hinweis: Änderung gegenüber Vorgängerversion VDP und TDB! Das Ergebnis der Funktion ist ein Leerstring, wenn kein (weiterer) Verzeichniseintrag
vorliegt, andernfalls ein String mit folgendem Aufbau:
Beispiel: Ausgabe aller Dateien mit der Extension "html" im Verzeichnis
"/home/tdbengine/doc"
Hinweis: Die tdbengine liest beim Aufruf von FirstDir alle passenden Verzeichniseinträge ein und stellt sie dann suczessive zur Verfügung. Beim nächsten Aufruf von FirstDir (und am Programmende) wird dieser interne Puffer wieder geleert. Diese Vorgegehensweise hat folgende Konsequenzen:
DirInfo(Path : STRING) : STRING Die Funktion liefert das selbe Ergebnis wie FirstDir(Path,''), kann
aber auch innerhalb einer FirstRec - NextRec - Sequenz eingesetzt werden.
Systemdatum und Systemzeittoday : REALLiefert das aktuelle Datum als Tage seit dem 1.1.0. Mit DateStr(today) erhalten Sie das aktuelle Datum als String. now : REAL Liefert die aktuelle Uhrzeit als Anzahl der Minuten seit Mitternacht. Hinweis: FRAC(now)*60 liefert die Sekunden mit einer Auflösung 1/1000 s Mit TimeStr(now) erhalten Sie die aktuelle Uhrzeit als String Beispiel:
Allgemeine DateifunktionDelFile(Pfad : STRING) : REALLöscht die mit "Pfad" angegebene Datei, wenn es sich nicht um ein Verzeichnis handelt, und wenn der anonyme http-User das Recht dazu hat. Unter Windows wird ein eventuell bestehender Schreibschutz ignoriert. Das Funktionsergebnis ist 0, wenn die Datei gelöscht werden konnte, andernfalls der Fehlercode des Betriebssystems. CopyFile(p_von, p_nach : STRING) : REAL Damit wird die Kopie einer Datei angelegt. p_von darf sein:
Externes Programm ausführenCGIExec(commandline : STRING [; s_timeout : REAL]) : REALDiese Funktion führt ein externes Programm aus. Der Parameter s_timeout wird (vorläufig) nur unter Win9x / WinNT ausgewertet. Das aufgerufene Programm wird komplett ausgeführt und gibt dann die Kontrolle an das CGI-Programm zurück. In diesem Fall liefert die Funktion das Ergebnis 0, in allen anderen Fällen den Fehlercode des Betriebssystems. Das aufgerufene Programm erhält die Ein- und Ausgabeströme des CGI-Programms. Deshalb sollte vor der Ausführung die Ausgabe-Pufferung beendet werden (da das externe Programm nicht in den tdbengine-Puffer schreiben kann). Besonderheiten Win9x, WinNT: Das Programm wird direkt gestartet. Mit s_timeout kann die maximal verfügbare Zeit (in Sekunden) angegeben werden. Wird dann das Programm vorzeitig abgebrochen, ist der Funktionswert -1. Wird für s_timeout der Wert -1 angegeben, so wird das Programm zwar komplett ausgeführt, die Ausgabe jedoch unterdrückt. Diese Vorgegensweise ist der Ausgabeumleitung in jedem Fall vorzuziehen. Die Rechte des ausgeführten Programms werden aus den Rechten des Internet-Klienten abgeleitet. Beispiel: richtig: (pkzip25.exe befindet sich in /home/tdbengine/) CGICloseBuffer .. Puffer leeren
richtig: (cmd.exe befindet sich in /home/tdbengine/) ...
falsch: (cmd.exe und pkzip25 befinden sich in /home/tdbengine/) ...
richtig: (pkzip25.exe befindet sich in /home/tdbengine/) CGIExec('pkzip25.exe -add backup.zip *',-1) .. erzeugt backup.zip ohne Ausgabe Einschränkung: CGIExec kann (zumindest problemlos) nur echte 32-Bit
Anwendungen ausführen.
Linux: Die commandline von CGIExec wird an die Shell des Internet-Klienten mit dessen Rechten übergeben. Hinweis: Hier ist die Ausgabeumleitung der empfohlene Weg, die Ausgaben des aufgerufenen Programms zu unterdrücken. Beispiel: CGICloseBuffer .. Puffer leeren
..
..
Hinweise: Sie sollten CGIExec immer mit besonderer Vorsicht einsetzen. Keine Experimente!
Freien Speicher in Partition ermittelnDiskFree(drive : REAL) : REALdrive: 0 = aktuelles Laufwerk (Win32) bzw. Partition, in der das
aktuelle Verzeichnis liegt (Linux, FreeBSD)
Rückgabewert: Freier Platz in Laufwerk / Partition bzw. -1, falls
Laufwerk nicht verfügbar
Umgebungsvariable ermittelnGetEnv(Name : STRING) : STRINGGetEnv liefert den Wert der Environment-Variablen mit dem angegebenen Namen. Zusätzlich steht nach jedem Aufruf ein Ramtext mit dem Namen "ramtext:environment"
zur Verfügung, der ebenfalls die
Beispiel:
|