Re: Shelling out CRTLF via QCMDEXC -- question about success/failure
Vern Hamberg via MIDRANGE-L <[email protected]> Tue, 9 Jun 2026 07:35:07 -0500
| Newsgroups | gmane.comp.hardware.ibm.midrange |
|---|---|
| Message-ID | <[email protected]> |
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.