PDA

View Full Version : Daten aus QFileSvr.400 lesen



Seiten : [1] 2

edig
26-01-06, 12:50
Hallo,

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p>

ich möchte mit dem C-API open() eine Datei aus dem Verzeichnis

/QFileSvr.400 /AS400B/home/test/test.properties zum lesen öffnen.<o:p></o:p>

Dabei erhalten ich eine –1 im FileDescriptor ( d.h. kann Datei nicht öffnen).

<o:p></o:p>

Wir haben also 2 AS/400-Maschinen eine AS400A und AS400B.

Wenn ich die Datei aus /home/test/test.properties von AS400A mit open()

zum lesen öffne, klappt alles wunderbar.

<o:p></o:p>

Mit qsh oder Navigator kann ich die Datei test.properties öffnen.

<o:p></o:p>

Meine Fragen sind folgende:

1. Muss ich was besonderes wegen Berechtigung auf AS400B einstellen?
(auf beiden Maschinen gibt es den Benutzer mit gleichem Kennwort)

2. Weiss jemand wie ich die globale Variable errno verwenden kann um den

Error-Code herauszufinden?

<o:p></o:p>

Vielen Dank...

<o:p></o:p>

KM
26-01-06, 14:11
Hast Du vorher mit MKDIR ein Verzeichnis zur zweiten iSeries hergestellt? Kannst Du die Dateien im Explorer sehen?

Kannst Du mal versuchen mit folgenden Einträgen im D-Teil Deines Programms die Exception Message-ID festzustellen?

D CPFMSG S 7 IMPORT('_EXCP_MSGID')
D * VALUE OPTIONS(*STRING)

Gruß,
KM

edig
26-01-06, 14:27
Hallo KM,

die Datei kann ich im Explorer sehen.

Die 2 Einträge in den D-Bestimmungen führten leider zu

einem Programmabbruch.


Trotzdem Danke...

Frank Hildebrandt
26-01-06, 14:32
Wenn die Variable 'errno' in einem RPG IV-Programm abgefragt werden soll, dann müssen folgende Statements hinzugefügt werden.

h BNDDIR('QC2LE')
d errno S 10I 0 Import('errno')

edig
26-01-06, 14:54
Hallo Frank,

wo wird der Variablen 'errno' dann der Wert zugewiesen?

Frank Hildebrandt
26-01-06, 15:27
Immer wenn eine Funktion der ILE C/C++ Run-Time Library verwendet wird, die ein Ergebnis in 'errno' stellt, so wird 'errno' auch ein Wert zugewiesen. Ich bin in der Litaratur auch schon öfters darauf gestoßen, dass vor dem Verwenden einer Funktion 'errno' initialisiert werden sollte. Also vor Deinem 'open' einfach 'errno = 0' codieren. Nach dem 'open' kannst Du dann 'errno' abfragen. In den Handbüchern findest Du dann die Bedeutung der einzelnen Codes.

edig
26-01-06, 15:57
etwas seltsam aber als Ergebnis erhalte ich bei errno eine 0

Frank Hildebrandt
26-01-06, 16:16
Das ergebnis von 'open' gleich -1 und errno gleich 0. Das kann nicht sein. Ich schlage vor, Du postest mal ein paar Statements.

Frank Hildebrandt
26-01-06, 16:48
Kommando zurück. Hier die Statements, mit denen das ganze wirklich funktioniert.

h bnddir('QC2LE')
D geterrno PR * extproc('__errno')
D errno S 10I 0 based(errnoptr)
d errnoptr S *

Nach dem 'open' folgendes Statement.

c Eval errnoptr = geterrno

Anschließend enthällt die variable errno den entsprechenden Wert. Habs gerade eben selbst noch mal getestet und hat funktioniert.

edig
27-01-06, 07:01
Hallo Frank,

so schaut's schon besser aus.
Danke hat geklappt.