Re: Shelling out CRTLF via QCMDEXC -- question about success/failure
Jon Paris <[email protected]> Tue, 9 Jun 2026 12:15:48 -0400
| Newsgroups | gmane.comp.hardware.ibm.midrange |
|---|---|
| Message-ID | <[email protected]> |
For me, I tend to use system() if I need to know what message caused the error, but don't care about the message text or substitution variables. That is probably 90%+ of all cases. I like system() because its intent is obvious (unlike the SQL examples) and easy to test for an error. Most times all you want is "did it work". Jon Paris [email protected] > On Jun 9, 2026, at 10:57 AM, Rob Berendt <[email protected]> wrote: > > I was a big fan of system(), until I was not. I forget why. Others have > alluded to the ease of getting the error with QCAPCMD instead. Perhaps > that was it. > > On Tue, Jun 9, 2026 at 8:35 AM Vern Hamberg via MIDRANGE-L < > [email protected]> wrote: > >> Hi Birgitta >> >> Yes, the system() function returns an integer, 0 if the command is >> successful. And, according to the reference, we have this - >> >>> If the system() function fails, the global variable _EXCP_MSGID in >>> <stddef.h> is set with the exception message ID. >> >> *Regards* >> >> *Vern Hamberg* >> >> IBM Champion 2025 <cid:[email protected]> CAAC >> (COMMON Americas Advisory Council) IBM Influencer 2023 >> >> >> On 6/9/2026 1:53 AM, Birgitta Hauser wrote: >>> Jon and AI >>> >>> How you'd get the CPF-Msg which is checked in the example if only an >> error code is returned? ;) >>> >>> When using QCMDEXC it is possible to trap the system error message! >>> >>> Mit freundlichen Grüßen / Best regards >>> >>> Birgitta Hauser >>> Modernization – Education – Consulting on IBM i >>> Database and Software Architect >>> IBM Champion since 2020 >>> >>> "Shoot for the moon, even if you miss, you'll land among the stars." >> (Les Brown) >>> "If you think education is expensive, try ignorance." (Derek Bok) >>> "What is worse than training your staff and losing them? Not training >> them and keeping them!" >>> "Train people well enough so they can leave, treat them well enough so >> they don't want to. " (Richard Branson) >>> "Learning is experience … everything else is only information!" (Albert >> Einstein) >>> >>> >>> -----Original Message----- >>> From: MIDRANGE-L<[email protected]> On Behalf Of >> Jon Paris >>> Sent: Monday, 8 June 2026 23:41 >>> To: Midrange Systems Technical Discussion<[email protected]> >>> Subject: Re: Shelling out CRTLF via QCMDEXC -- question about >> success/failure >>> >>> Personally, I'd use the system() function. Much easier to test for >> errors and determine the root failure message. >>> >>> Google's AI came up with this example whcih I have not tested but it >> looks about right. >>> >>> **free >>> // Modern control specifications—no bnddir('QC2LE') needed! >>> ctl-opt dftactgrp(*no); >>> >>> // Prototype for the C system() function dcl-pr runCommand int(10) >> extproc('system'); >>> cmdString pointer value options(*string); end-pr; >>> >>> // Import system variable to capture error message IDs dcl-s errorMsg >> char(7) import('_EXCP_MSGID'); >>> >>> // Variable to store the return code >>> dcl-s returnCode int(10); >>> >>> // Execute a CL command directly >>> returnCode = runCommand('CLRPFM FILE(MYLIB/MYFILE)'); >>> >>> // Check for execution failure >>> if returnCode <> 0; >>> if errorMsg = 'CPF3142'; // File not found >>> // Handle specific error logic here >>> endif; >>> endif; >>> >>> *inlr = *on; >>> >>> >>> Jon Paris >>> [email protected] >>> >>> >>> >>>> On Jun 8, 2026, at 5:31 PM, James H. H. Lampert via MIDRANGE-L< >> [email protected]> wrote: >>>> >>>> I've got a project in which I will be using a QCMDEXC call to shell out >> a CRTLF (from a generated source member). What is the easiest way for the >> calling program to determine whether the CRTLF was successful? >>>> >>>> -- >>>> JHHL >>>> -- >>>> This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing >>>> list To post a message email:[email protected] To >>>> subscribe, unsubscribe, or change list options, >>>> visit:https://lists.midrange.com/mailman/listinfo/midrange-l >>>> or email:[email protected] >>>> Before posting, please take a moment to review the archives at >>>> https://archive.midrange.com/midrange-l. >>>> >>>> Please [email protected] for any subscription >> related questions. >>>> >>> -- >>> This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing >> list To post a message email:[email protected] To subscribe, >> unsubscribe, or change list options, >>> visit:https://lists.midrange.com/mailman/listinfo/midrange-l >>> or email:[email protected] >>> Before posting, please take a moment to review the archives athttps:// >> archive.midrange.com/midrange-l. >>> >>> Please [email protected] for any subscription related >> questions. >>> >>> >> -- >> This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing list >> To post a message email: [email protected] >> To subscribe, unsubscribe, or change list options, >> visit: https://lists.midrange.com/mailman/listinfo/midrange-l >> or email: [email protected] >> Before posting, please take a moment to review the archives >> at https://archive.midrange.com/midrange-l. >> >> Please contact [email protected] for any subscription related >> questions. >> >> > -- > This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing list > To post a message email: [email protected] > To subscribe, unsubscribe, or change list options, > visit: https://lists.midrange.com/mailman/listinfo/midrange-l > or email: [email protected] > Before posting, please take a moment to review the archives > at https://archive.midrange.com/midrange-l. > > Please contact [email protected] for any subscription related questions. > -- This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing list To post a message email: [email protected] To subscribe, unsubscribe, or change list options, visit: https://lists.midrange.com/mailman/listinfo/midrange-l or email: [email protected] Before posting, please take a moment to review the archives at https://archive.midrange.com/midrange-l. Please contact [email protected] for any subscription related questions.