|
Hi, Your error checking is too simple, you need to make it more complicated. :) Let me explain: QzshShell, like QShell itself, creates a new process to run each command that you send to it, called a "child process". (It probably uses the spawn() API or similar to do this). It then calls the waitpid() API to wait for the command to complete, and returns the "status" argument from the waitpid() API. What this means is, QzshShell() will only return a -1 to indicate an error if the spawn() (create child process) or waitpid() (wait for child process) functions actually fail. It does NOT return a -1 if the command that you sent to it has failed. Instead, you need to check some of the bits in the returned value to determine if it has failed or not. If you look at the manual page for the QzshSystem() API, there's an example at the bottom (albeit, written in C) which shows the program using the WIFxxxx macros to check for the success or failure of the child process. Good luck :) When the command starts, On Fri, 5 Apr 2002, David Morris wrote: > Group, > > This was also posted to the Java-l > list and is included here at the > list moderator's suggestion: > > After creating an RPGIV procedure > that calls QzshSystem, I can't seem to > get it to work. I always get a return > code of 7 and a message that the > file was not found. My best guess is > that it is expecting the command to > be passed as ASCII. The API is pretty > simple and I thought I would have > this running in a few minutes, instead > I have spent a couple of hours > with no luck. > > I have tried various prototypes for > the API, including > > DQzshSystemAPI PR 10I 0 EXTPROC('QzshSystem') > D PR_Cmd * VALUE > > and > > DQzshSystemAPI PR 10I 0 EXTPROC('QzshSystem') > D PR_Cmd 5000A CONST > > and > > DQzshSystemAPI PR 10I 0 EXTPROC('QzshSystem') > D PR_Cmd 5000A VALUE OPTIONS(*STRING) > > I think any of these should work. > > Here is an example of what I have tried: > > C EVAL CmdStrLen = %LEN(%TRIM(Cmd)) + 1 > C ALLOC CmdStrLen pCmdStr > C EVAL %STR(pCmdStr: CmdStrLen) = Cmd > C EVAL RtnCod = QzshSystemAPI(pCmdStr) > C IF RtnCod <> *ZEROS > C CALLP SndUnixErr('Error in Qsh Command: ' + > C %TRIM(Cmd)) > C EVAL RtnErr = *ON > C ENDIF > C DEALLOC pCmdStr > > Does anyone have any ideas? > > Thanks, > > David Morris > _______________________________________________ > This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list > To post a message email: RPG400-L@midrange.com > To subscribe, unsubscribe, or change list options, > visit: http://lists.midrange.com/cgi-bin/listinfo/rpg400-l > or email: RPG400-L-request@midrange.com > Before posting, please take a moment to review the archives > at http://archive.midrange.com/rpg400-l. >
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.