View Full Version : Lesen IFS: Fehler CPE3525 Objekt für die Verarbeitung zu gross
Hallo zusammen,
ich habe folgendes Problem:
Beim auslesen des IFS mittels readdir() bricht das Programm bei einem bestimmten grossen Eintrag mit CPE3525 ab.
Schleife für auslesen:
eval p_dirent = readdir(dir)
dow p_dirent <> *NULL
**
** verarbeitung daten
**
eval p_dirent = readdir(dir)
enddo
beim readdir kann doch kein parameter large_objects gesetzt werden?
Hat hier jemand eine idee?
vielen dank !
Da du nur die 32-Bit-Funktionen verwendest, können Objekte größer 2GB nicht bearbeitet werden.
Du musst dir die 64-Bit-Funktionen raussuchen.
gibt es für readdir() auch eine 64 bit funktion, die dann die large objects bearbeiten kann?
open64() kenne ich....
Probiers mal damit:
readdir_r()--Read Directory Entry (http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/topic/apis/readdirr.htm?resultof=%22%72%65%61%64%64%69%72%22% 20)
Hallo fuerchau,
danke für deinen tip:
readdir_r liefert mir momentan immer den Fehler 3408 retour:
**
eval rtc = readdir_r(dir : point64 : point64_3)
**
wieso muss ich noch suchen, momentan weiss ich nicht wieso....
Hilfe!
Ich steig nicht dahinter, wahrscheinlich verstehe ich die Logik vom Readdir_r nicht ganz....was wird hier mit Initialisieren gemeint?
Parm1 ist der Pointer vom Opendir()
Parm2, parm 3 ?
sollten eigentlich die Pointer zur dirent-Struktur sein, oder?
S.Neinawaie
03-10-11, 18:59
Hallo!
Ich hab dir mal schnell ein kleines Beispiel erstellt. (Testsystem: V5R3)
Diverse Aktionen (überprüfen auf *NULL bei Pointern/abfangen von "." und ".." bei OpenDir & ähnliches hab ich absichtlich nicht mit kopiert).
************************************************** ************************
* ReadDir_r - Entry/Result DataStructure *
************************************************** ************************
D DirEnt DS Based(Ptr_Result)
D Res01 16A
D FileNoGenId 10U 0
D FileNo 10U 0
D RecLen 10U 0
D Res03 10I 0
D Res04 6A
D Res05 2A
D NlsInfo 12A
D CCSID 10I 0 Overlay(NlsInfo:1)
D CtryId 2A Overlay(NlsInfo:5)
D LangId 3A Overlay(NlsInfo:7)
D Res06 3A Overlay(NlsInfo:10)
D FileNameLen 10U 0
D FileName 640A
************************************************** ************************
* ReadDir_r - Prototyp *
************************************************** ************************
D ReadDir PR 10I 0 ExtProc('readdir_r')
D Directory * Value Options(*String)
D Entry *
D Result *
/Free
Ptr_Dir = OpenDir('/home/test');
DoU (Ptr_Result = *NULL);
RtnCode = ReadDir(Ptr_Dir:Ptr_Entry:Ptr_Result);
EndDo;
RtnCode = CloseDir(Ptr_Dir);
*InLr = *On;
/End-Free Falls sich ein Fehler eingeschlichen hat, bitte ich um Rückmeldung.
Lg,
Sam
Nachtrag bezüglich Error Code 3408:
EFAULT 3408 The address used for an argument was not correct. In attempting to use an argument in a call, the system detected an address that is not valid.
Hallo Sam, merci f das Beispiel,
Der Fehler war anscheinend, dass ich Param 2+3 in den D-bestimmungen mit VALUE angegeben habe.
Jetzt ist der Fehler weg und ich kann mal damit arbeiten u schauen, ob das mit den Dateien > 2GB klappt.
Vielen Dank.