× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



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 thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

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.