-
Hier wäre dann noch der genaue Fehlercode ERRNO wichtig.
Ggf. gibts im Joblog noch Hinweise.
Wie sieht die Berechtigung der Datei aus (WRKLNK, Auswahl 9) ?
-
Guten Morgen und herzlichen Dank für die Mühe.
Also einen Fehlercode gibt es nicht wirklich, da der fopen() beim Scheitern im Pgm. abgefangen wird.
So sieht's im Pgm. aus:
testfile = fopen( xmlfile.name, "r" );
if ( testfile != NULL ) {
fclose( testfile );
}
else
{
fprintf(stderr, "fopen() error./n");
fprintf(stderr, "Error accessing file: %s /n", xmlfile.name);
rc = -1;
goto exit;
};
Der JOBLOG sagt auch nichts genaues.
Für die Dateien habe ich die volle Berechtigung und die Dateien gehören mir.
Freundliche Grüße
Alex
-
Dies zeigt mir, dass du in C nicht so firm bist.
"errno" ist eine extern deklarierte Variable, die einen Fehlercode zum letzten aufgetretenen Fehler enthält.
Es gibt auch eine Routine, die den Text zu diesem Fehler liefert (must du mal im C-Handbuch suchen).
-
Ja, "C" ist nicht mein Hauptdialekt, eher RPG.
Wie gesagt, dies ist ein IBM Beispielpgm. das ich verwende,
fertig kompiliert und lauffähig.
Wo könnte ich denn die ERRNO finden ? Im JOBLOG sehe ich nicht viel.
-
OK:
Füge am Anfang des C-Programms folgendes ein:
Ändere die Zeile:
Code:
fprintf(stderr, "Error accessing file: %s %d/n", xmlfile.name, errno);
Die Bedeutung des Fehlers findest du dann in
QSYSINC/H Member ERRNO
-
Gut, gut.
Das ist das Ergebnis:
#define ENOENT 3025 /* no such file or library
Das gibt mir zu denken. Sind doch beide da, Datei und Bibliothek. 
Datei . . . . . : STDERR Bibliothek . . . : QTEMP
Teildatei . . . : STDERR Satz . . . . . . : 1
Steuerung . . . : Spalte . . . . . : 1
Suchen . . . . . :
*...+....1....+....2....+....3....+....4....+....5 ....+....6....+....7....+....8....+....9....+....0 ....+....1....+....2....+....3
000000000000fopen() error.
000000000000Error accessing file: /home/teccmd/NPMD.xml 3025
****** DATENENDE ******
-
Ggf. wird casesensitive gesucht.
Prüfe mal den Namen genau ab.
Ich hatte auch schon mal den Fall, dass im Verzeichnis/Namen am Ende noch Leerzeichen enthalten waren.
-
Die Namen/Pfadangaben stimmen überein.
Irgendwie stehe ich momentan auf'm Schlauch.
****************
Mit Objektverbindungen arbeiten
Verzeichnis . . . : /home/TECCMD
Auswahl eingeben und Eingabetaste drücken.
2=Editieren 3=Kopieren 4=Entfernen 5=Anzeigen 7=Umbenennen
8=Attribute anzeigen 11=Aktuelles Verzeichnis ändern ...
Aus-
wahl Objektverbindung Art Attribut Text
dad.dtd STMF
test.txt STMF
NPMD.dad STMF
NPMD.xml STMF
**************************
Programm aufrufen (CALL)
Auswahl eingeben und Eingabetaste drücken.
Programm . . . . . . . . . . . . > SHRED Name
Bibliothek . . . . . . . . . . > DXXSAMPLES Name, *LIBL, *CURLIB
Parameter . . . . . . . . . . . > DEGOEHR1
> '/home/TECCMD/NPMD.dad'
+ für weitere Werte > '/home/TECCMD/NPMD.xml'
-
Nur so zum Test:
Mach vorher mal einen CD in "/Home/TECCMD" und ruf das Programm ohne Pfadangaben auf.
Ist TECCMD nun groß oder kleingeschrieben ?
Schau mal ins C-Handbuch nach "fopen" und ggf. weiteren Optionen "r....".
-
TECCMD ist inzwischen groß geschrieben.
1.)
Aktuelles Arbeitsverzeichnis anzeigen
Verzeichnis . . . . . : /home/TECCMD
2.)
CALL PGM(DXXSAMPLES/SHRED) PARM(DEGOEHR1 NPMD.DAD NPMD.XML)
3.)
Physische Teildatei anzeigen
Datei . . . . . : STDERR Bibliothek . . . : QTEMP
Teildatei . . . : STDERR Satz . . . . . . : 1
Steuerung . . . : Spalte . . . . . : 1
Suchen . . . . . :
*...+....1....+....2....+....3....+....4....+....5 ....+....6....+....7....+....8....+....9....+....0 ....+....1....+....2....+....3
000000000000fopen() error.
000000000000Error accessing file: NPMD.XML 3025
****** DATENENDE ******
4.) ( Bin auf der Suche nach fopen()-Doku im Netz. c.u.
-
Das liegt gar nicht daran, sondern an einer Compile-Option !
SYSIFCOPT
System interface options (SYSIFCOPT) - Help
Specifies which system interface options will be used for the module
object being created. You can specify them in any order, separated by
one or more blanks. When an option is specified more than once, or when
two options conflict, the last one specified is used.
*NOIFSIO
The module object will use the iSeries Data Management file system
for C stream I/O operations.
*IFSIO
The module object will use the Integrated File System for C stream
I/O operations.
*IFS64IO
The module object will use the Integrated File System for 64-bit C
stream I/O operations.
*NOASYNCSIGNAL
Does not enable runtime mapping of synchronous signalling functions
to asynchronous signalling functions.
*ASYNCSIGNAL
Enable runtime mapping of synchronous signalling functions to
asynchronous signalling functions. Specifying this option causes C
runtime to map the synchronous signal() and raise() functions to the
asynchronous sigaction() and kill() functions respectively.
Du must *IFSIO auswählen da der fopen sonst auf das Format "Lib/File" und nicht auf das IFS-Format geht.
-
Similar Threads
-
By vige1000 in forum NEWSboard Linux
Antworten: 4
Letzter Beitrag: 21-12-06, 11:56
-
By Weki in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 11-09-06, 13:31
-
By kuempi von stein in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 05-07-06, 08:50
-
By Jenne in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 29-03-06, 09:49
-
By DEVJO in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 18-04-05, 09:38
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks