Dieser Abschnitt behandelt folgende Themen:
Diese API ermöglicht Ihnen den Zugriff auf UNIX- und Windows-Dateien aus Natural-Programmen.
Bei FILE / READ
oder FILE / WRITE
und wenn der
Puffer-Typ B, C oder D benutzt
wird:
CALLNAT 'NOPUNX1N' NOPUNX1A data-buffer
Bei allen anderen Aufrufen:
CALLNAT 'NOPUNX1N' NOPUNX1A
Zum Aufrufen von NOPUNX1N
müssen Sie die Parameter Data Area
NOPUNX1A
benutzen, die im folgenden Abschnitt beschrieben
wird.
Die Parameter in der Parameter Data Area NOPUNX1A
haben
folgende Bedeutung:
Parameter | Format/Länge | Verwendung | ||
---|---|---|---|---|
OBJECT |
A16 | ein | Mögliche Werte:
|
|
FUNCTION
|
A8 | ein | Mögliche Werte für USER :
|
|
LOGON |
Bei einem Knoten anmelden | |||
LOGOFF
|
Bei einem Knoten abmelden. | |||
Mögliche Werte für FILE :
|
||||
APPEND |
An eine existierende Datei anhängen. | |||
COPY |
Datei kopieren. | |||
CLOSE |
Datei schließen. | |||
DELETE |
Datei löschen. | |||
DELDIR |
Verzeichnis löschen. | |||
DIR |
Datei-Liste. | |||
DTA |
Dateien sortiert nach Änderungszeit in aufsteigender Reihenfolge auflisten. | |||
DTD |
Dateien sortiert nach Änderungszeit in absteigender Reihenfolge auflisten. | |||
GETATTR |
Datei-Attribute abrufen. | |||
LINECNT |
Zeilen einer Datei zählen. | |||
MOVE |
Datei verschieben (oder umbenennen). | |||
READ |
Datei lesen. | |||
SCAN |
In ein Datei nach Strings suchen. | |||
WRITE |
Datei schreiben. | |||
Mögliche Werte für
JOB :
|
||||
CANCEL |
Einen Job stornieren. | |||
COMMAND |
Ein Kommando ausführen. | |||
GETEXIT |
Den Exit Code eines bereits beendeten Jobs abrufen. | |||
Mögliche Werte für
SERVER :
|
||||
CL-TL-G |
Command Log Level und Trace Level abrufen. | |||
RETURN-CODE |
N8 | aus | 0 | Funktion war ok. Anderer Wert: siehe Inhalt von
RETURN-TEXT
|
RETURN-TEXT |
A80 | aus | Erklärung zu
RETURN-CODE .
|
|
NODE |
N5 | ein | Knoten, wie in Entire Operations definiert. | |
NODE-NAME |
A16 | ein | Knoten-Name
|
|
NODE-ACCESS-MODE |
A1 | nur von der API zu ändern | leer | Noch nicht geprüft. |
N |
Knoten ist nicht lokal. | |||
Y |
Knoten ist lokal. | |||
Dieses Feld wird von der API bei
USER / LOGON gesetzt. Es soll von der Anwendung nicht
geändert werden.
|
||||
USERID |
A20 | ein | Benutzerkennung für Logon. | |
GROUP |
A20 | ein | Optional: | |
UNIX | Group für Logon. | |||
Windows | Domäne für Logon. | |||
PASSWORD |
A16 | ein | Passwort für Logon.
Anmerkung: |
|
SID |
N10 | nur von der API zu ändern | Session
ID von Entire System Server.
Dieses Feld wird von der API bei |
|
UID |
A10 | nur von der API zu ändern | Interne
Benutzerkennung des Betriebssystems.
Dieses Feld wird von der API bei |
|
REDEF-1 |
A10 | - | Redefinitionsbereich. | |
SERVER-COMMAND-LOG-LEVEL |
N5 | aus | Ausgabe
von SERVER / CL-TL-G .
|
|
SERVER-TRACE-LEVEL |
N5 | aus | Ausgabe
von SERVER / CL-TL-G .
|
|
HTML-CODE-HANDLING |
A1 | ein/aus | Für
FILE -Funktionen.
|
|
CODEPAGE-ID |
N5 | ein | Für die
FILE -Funktionen WRITE und APPEND .
|
|
OPSYS-CLASS |
A1 | ein/aus | Betriebssystemklasse des Knotens (NODE ).
Mögliche Werte |
|
B |
BS2000 | |||
M |
z/OS | |||
V |
z/VSE | |||
X |
UNIX | |||
W |
Windows | |||
USE-PAM |
A1 | ein | Für
USER / LOGON .
|
|
INHERIT-ACCESS-TIME |
A1 | ein | Für
FILE -Funktionen.
|
|
BUFFER-FORMAT |
A1 | ein | Für die
FILE -Funktionen READ , WRITE und
APPEND .
Mögliche Werte |
|
T |
Text, einzelner Datensatz. | |||
3 |
Text, mehrere Datensätze, 3-Byte-Felder. | |||
L |
Text, mehrere Datensätze, Felder mit variabler Länge. | |||
A |
Base64-kodiertes Format. | |||
UNUSED-1 |
A10 | - | Unbenutzt. | |
ESC-TRIGRAPH |
A1 | ein | Trigraph-Verwendung: | |
leer oder N |
Keine Trigraph-Konvertierung. | |||
Y
|
Fragezeichen (?) als Trigraph-Escape verwenden | |||
anderes Zeichen | Dieses Zeichen als Trigraph-Escape verwenden. | |||
TRACE-LEVEL |
N1 | ein | 0 |
Kein Trace. |
> 0 |
Trace eingeschaltet. | |||
TRACE-TARGET |
A1 | ein | Gibt an, wohin der Trace geschrieben werden soll. | |
S |
SYSOUT | |||
L |
Entire Operations-Protokoll (NOP Log) | |||
B |
Beide: SYSOUT und
Entire Operations-Protokoll (NOP Log). Nur relevant, wenn
TRACE-LEVEL > 0.
|
|||
BUFFER-TYPE |
A1 | ein | Puffer-Typ.
Hauptsächliche Verwendung bei den Mögliche Werte |
|
A oder leer
|
XS-FIRWA-BUFFER-TYPE Größe 600. | |||
B |
XS-FIRWB-BUFFER-TYPE size 9700. | |||
C |
XS-FIRWC-BUFFER-TYPE size 99000. | |||
D |
XS-FIRWD-BUFFER-TYPE size 59000. | |||
Für die Puffer-Typen
B , C und D :
Der Puffer muss als separater Parameter im Statement
|
||||
OBJECT-AREA |
A1200 | - | Objekt-spezifische Felder.
Objekt: |
|
F-FILE |
A250 | ein | Dateiname.
Der Dateiname ist vollqualifiziert anzugeben, d.h. als kompletter Pfad ab Basis des Dateisystems. Der Dateiname darf Umgebungsvariablen enthalten. |
|
F-HANDLE |
N10 | nur von der API zu ändern | Datei-Handle.
Wird vom Entire System Server beim ersten Zugriff auf die Datei
vergeben; gilt bis |
|
F-LINE |
N10 | ein/aus | ein | Zeilennummer, ab der gelesen werden soll (0 oder 1: ab Dateibeginn lesen) |
aus | (letzte) gelesene Zeilennummer. | |||
F-NUMBER-RECORDS |
N10 | aus | Anzahl der gelesenen Datensätze. | |
F-SEARCH-TEXT |
A100 | ein | Nur FILE /
SCAN : Text, nach dem in der Datei gesucht werden soll.
|
|
F-RECORD-BUFFER |
A600 | ein/aus | Gesamter Record-Buffer
(Redefinition von F-RECORD-BUFFER )
Wird nur bei |
|
F-RECORD-250 |
A250 | ein/aus | FILE / READ ,
FILE / WRITE : Effektiver Datensatz.
Wird nur bei |
Die API ist unter Entire Operations auf Großrechnern und Entire Operations auf Open Systems (UNIX + Windows) einsetzbar.
Mit der API kann nur auf UNIX- und Windows-Knoten zugegriffen werden.
In der verwendeten Natural-Umgebung müssen als Steplibs SYSEOR und die von SYSEOR verwendeten Steplibs definiert sein.
Die von Entire Operations verwendeten Systemdateien (System File 1,
SAT Log File) müssen über LFILE
-Zuweisung definiert
sein.
Im folgenden bedeutet der Aufruf OBJECT / FUNCTION
(z.B.
USER / LOGON
) den Aufruf von NOPUNX1N
mit dem
angebenen Objekt und der angegebenen Funktion.
Windows-Dateinamen können auch mit normalen Schrägstrich-Zeichen (/) anstelle des umgekehrten Schrägstrichs (\) angegeben werden.
c:/work/file1.txt
ist gleichbedeutend mit
c:\work\datei1.txt
Alle Datei-Operationen funktionieren nur innerhalb einer gültigen Session.
Die Session wird mit USER / LOGON
aufgebaut und mit
USER / LOGOFF
beendet.
Während der Session dürfen SESSION-ID
, UID
,
GID
nicht geändert werden.
USER / LOGON FILE / ... FILE / ... ... USER / LOGOFF
Dateien brauchen nicht explizit geöffnet zu werden. Das wird beim
ersten Zugriff mit FILE / READ
oder FILE / WRITE
automatisch ausgeführt.
Nach dem Lesen oder Schreiben einer Datei muss die Datei mit
FILE / CLOSE
geschlossen werden.
Nach jedem Aufruf von NOPUNX1N
ist der Fehlercode in
NOPUNX1A.RETURN-CODE
zu überprüfen. In
NOPUNX1A.RETURN-TEXT
wird ein Fehlertext zurückgegeben.
Mit der Funktion FILE/READ
wird eine Datei sequenziell
gelesen.
In NOPUNX1A.F-LINE
kann eine Startzeile übergeben
werden.
Wenn NOPUNX1A.F-LINE
den Wert 0
(Null) oder 1
enthält, wird ab Dateibeginn gelesen.
USER / LOGON R1. repeat FILE / READ if (NOPUNX1A.RETURN-CODE ne 0) escape bottom (R1.) end-if ... Record behandeln end-repeat /* R1. FILE / CLOSE USER / LOGOFF
Mit der Funktion FILE / SCAN
ist es möglich, eine Datei
gezielt nach einer bestimmten Zeichenkette zu durchsuchen. Der Suchzeichenkette
muss in NOPUNX1A.F-SEARCH-TEXT
übergeben werden.
USER / LOGON R1. repeat FILE / SCAN if (NOPUNX1A.RETURN-CODE ne 0) escape bottom (R1.) end-if ... Record behandeln add 1 to NOPUNX1A.F-LINE * -- Startzeile für Folge-Scan end-repeat /* R1. FILE / CLOSE USER / LOGOFF
Mit der Funktion FILE / WRITE
wird eine Datei sequenziell
geschrieben.
USER / LOGON R1. repeat ... allocate record in NOPUNX1A.F-RECORD-250 FILE / WRITE if (...) escape bottom (R1.) end-if end-repeat /* R1. FILE / CLOSE USER / LOGOFF
Beispiel für die Verwendung eines großen Puffers für das Lesen und Schreiben von Dateien.
Definieren Sie einen großen Puffer:
1 #BUFFER-99000 (A99000)
Wählen Sie einen der folgenden Puffer-Typen:
NOPUNX1A.BUFFER-TYPE := 'B' /* 9900 bytes NOPUNX1A.BUFFER-TYPE := 'C' /* 99000 bytes NOPUNX1A.BUFFER-TYPE := 'D' /* 59000 bytes
Rufen Sie die API auf:
CALLNAT 'NOPUNX1N' NOPUNX1A #BUFFER-99000
Die Parameterdefinition für NOPUNX1N
ist:
DEFINE DATA PARAMETER USING NOPUNX1A PARAMETER 1 P-BUFFER-99000 (A99000) BY VALUE RESULT OPTIONAL ... END-DEFINE
Anmerkung:#BUFFER-99000
kann je nach der Größe, die mit
NOPUNX1A.BUFFER-TYPE
angegeben wird, maximal 9900, 99000 oder
59000 Bytes enthalten. Die in den Puffer geschrieben Daten dürfen weniger Bytes
haben, aber nicht die angegebene Puffergröße überschreiten.
Mit FILE / DELETE
kann man eine oder mehrere Dateien
löschen.
Wenn F-FILE
ein Platzhalterzeichen (*) enthält, werden alle
Dateien gelöscht, für die das Platzhalterzeichen zutrifft.
Für FILE / COPY
wird die Zieldatei in
F-RECORD-250
übergeben.
Für FILE / MOVE
wird die Zieldatei in
F-RECORD-250
übergeben.
Zur Existenzprüfung einer Datei kann die Funktion FILE /
DIR
mit einem eindeutigen Dateinamen verwendet werden. Wenn in
NOPUNX1A.RETURN-CODE
eine Null zurückgegeben wird, so existiert
die Datei.
Mit FILE / DIR
können Sie Dateilisten für ein Verzeichnis
erstellen.
Mit dem in NOPUNX1A.F-FILE
bereitgestellten
Platzhalterzeichen-Ausdruck können Sie die Liste eingrenzen.
/tmp/* |
Alle Dateien im Verzeichnis
/tmp .
|
/tmp/*.txt |
Dateien im Verzeichnis /tmp , die mit
.txt enden.
|
Die Dateinamen werden in F-RECORD-BUFFER
zurückgegeben. Die
Namen sind durch Semikolon (;) getrennt.
Als Beispiel für die Separierung siehe SHOW-DIR-BUFFER
(weiter unten).
Wenn der Puffer für die Dateinamen nicht ausgereicht hat, wird in
NOPUNX1A.RETURN-CODE
der Wert 19
(more
objects
) zurückgegeben.
Dateiename mit Platzhalterzeichen (Wildcard-Notation).
USER / LOGON ... allocate file name (with wildcard) in NOPUNX1A.F-FILE R1. repeat FILE / DIR decide on first value of NOPUNX1A.RETURN-CODE value 0, 19 /* 0: ok, 19: more objects perform SHOW-DIR-BUFFER none value ignore end-decide if NOPUNX1A.RETURN-CODE ne 19 escape bottom (R1.) end-if add 1 to NOPUNX1A.F-LINE end-repeat /* R1. FILE / CLOSE USER / LOGOFF * --------------------------------------------------------------------- DEFINE SUBROUTINE SHOW-DIR-BUFFER * --------------- * -- Function FILE / DIR: * -- The record buffer contains a file list, with delimiter ';' * -- This routine separates the single file names out of the buffer. * -- #DIR-FILE and #DIR-REST should be declared as (A600) * SDB1. REPEAT EXAMINE NOPUNX1A.F-RECORD-BUFFER FOR ';' REPLACE FIRST WITH ':' SEPARATE NOPUNX1A.F-RECORD-BUFFER INTO #DIR-FILE #DIR-REST WITH DELIMITER ':' * -- now #DIR-FILE contains a single file name, without qualifiers IF #DIR-REST = ' ' ESCAPE BOTTOM (SDB1.) END-IF NOPUNX1A.F-RECORD-BUFFER := #DIR-REST END-REPEAT /* SDB1. END-SUBROUTINE