Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > Get system() error message

Reply
Thread Tools

Get system() error message

 
 
jose luis fernandez diaz
Guest
Posts: n/a
 
      05-14-2004
Hi,

In the program below:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

using namespace std;
int main()
{
system("ls asdf");

printf("%d\n", errno);

return 0;
}


the output is:

ls: asdf not found
0


Two questions:

1) How can I get the error message(ls: asdf not found) in the program?

2) Why is errno 0 ?

Thanks,
Jose Luis.
 
Reply With Quote
 
 
 
 
Joona I Palaste
Guest
Posts: n/a
 
      05-14-2004
jose luis fernandez diaz <(E-Mail Removed)> scribbled the following
on comp.lang.c:
> Hi,


> In the program below:


> #include <stdio.h>
> #include <stdlib.h>
> #include <errno.h>


> using namespace std;
> int main()
> {
> system("ls asdf");


> printf("%d\n", errno);


> return 0;
> }



> the output is:


> ls: asdf not found
> 0



> Two questions:


> 1) How can I get the error message(ls: asdf not found) in the program?


By redirecting it to a file and reading from there. It's the only way
supported by ISO standard C or C++.

> 2) Why is errno 0 ?


Because the program was correctly able to call the command ls. The fact
that the command ls itself failed is none of C's or C++'s concern.

--
/-- Joona Palaste ((E-Mail Removed)) ------------- Finland --------\
\-- http://www.helsinki.fi/~palaste --------------------- rules! --------/
"He said: 'I'm not Elvis'. Who else but Elvis could have said that?"
- ALF
 
Reply With Quote
 
 
 
 
Darrell Grainger
Guest
Posts: n/a
 
      05-14-2004
On Fri, 14 May 2004, jose luis fernandez diaz wrote:

> Hi,
>
> In the program below:
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <errno.h>
>
> using namespace std;
> int main()
> {
> system("ls asdf");
> printf("%d\n", errno);
> return 0;
> }
>
> the output is:
>
> ls: asdf not found
> 0
>
> Two questions:
>
> 1) How can I get the error message(ls: asdf not found) in the program?


Cannot give a definitive answer using just ISO/ANSI C. You need to get
into system specific code. Something like:

system("ls asdf > error.txt");

might work. But not if > only captures stdout and the message is sent to
stderr. The type of shell that system is using will make a difference. You
might need to use:

system("ls asdf 2> error.txt");
or
system("ls asdf >& error.txt");

The possibilities are many. It will depend on so many factors. Namely, how
is system() implemented? How is the command implemented? how is the system
configured?

> 2) Why is errno 0 ?


Why not? There is nothing in the system() command that indicates it will
set errno for any reason. I could run a program as a user where system()
fails and it still won't set errno to anything different.

You are going to have to restrict your solution to a specific operating
system. In which case you need to ask a newsgroup that deals with your
operating system to find out the best solution.

--
Send e-mail to: darrell at cs dot toronto dot edu
Don't send e-mail to http://www.velocityreviews.com/forums/(E-Mail Removed)
 
Reply With Quote
 
Dan Pop
Guest
Posts: n/a
 
      05-14-2004
In <(E-Mail Removed) > (E-Mail Removed) (jose luis fernandez diaz) writes:

>In the program below:
>
>#include <stdio.h>
>#include <stdlib.h>
>#include <errno.h>
>
>using namespace std;


This is a syntax error in C. If you cross-post, make sure that your code
is correct in both languages!

>int main()
>{
> system("ls asdf");
>
> printf("%d\n", errno);
>
> return 0;
>}
>
>the output is:
>
>ls: asdf not found
>0
>
>
>Two questions:
>
> 1) How can I get the error message(ls: asdf not found) in the program?


By not using system() in the first place. Your platform provides a better
alternative. It's even documented in the c.l.c FAQ, which you didn't
bother to check *before* posting.

> 2) Why is errno 0 ?


Why not? The C standard doesn't require system() to touch errno at all
and your platform's documentation says:

ERRORS

The system() function may set errno values as described by fork().
In addition, system() may fail if:

[ECHILD]
The status of the child process created by system()
is no longer available.

The implied fork() call obviously succeeded, so it had no reason to touch
errno, either.

Before posting such questions, try to understand how things work and
check the documentation. Sure, there *was* an errno set somewhere,
but this somewhere was the process executing the ls command, not *your*
program. That errno was lost without trace by the time that process
terminated, before your system() call returned.

Dan
--
Dan Pop
DESY Zeuthen, RZ group
Email: (E-Mail Removed)
 
Reply With Quote
 
Kieran Simkin
Guest
Posts: n/a
 
      05-14-2004
The way I understand it, piping output to a file via system() isn't easily
do-able portably. You might want to look into popen() or a pipe() - fork() -
exec()

--


~Kieran Simkin
Digital Crocus
http://digital-crocus.com/

"jose luis fernandez diaz" <(E-Mail Removed)> wrote in
message news:(E-Mail Removed) om...
> Hi,
>
> In the program below:
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <errno.h>
>
> using namespace std;
> int main()
> {
> system("ls asdf");
>
> printf("%d\n", errno);
>
> return 0;
> }
>
>
> the output is:
>
> ls: asdf not found
> 0
>
>
> Two questions:
>
> 1) How can I get the error message(ls: asdf not found) in the program?
>
> 2) Why is errno 0 ?
>
> Thanks,
> Jose Luis.



 
Reply With Quote
 
Dan Pop
Guest
Posts: n/a
 
      05-17-2004
In <1Odpc.876$(E-Mail Removed)> "Kieran Simkin" <(E-Mail Removed)> writes:

>The way I understand it, piping output to a file via system() isn't easily
>do-able portably. You might want to look into popen() or a pipe() - fork() -
>exec()


Redirecting output to a file via system() is a lot more portable than
popen() or pipe-fork-exec. So, if portability is an overriding issue,
output redirection is the winning approch.

OTOH, portability is seldom an issue when system() is used, considering
that system's argument is highly non-portable (when it's not a null
pointer).

Dan
--
Dan Pop
DESY Zeuthen, RZ group
Email: (E-Mail Removed)
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Unspecified error Oracle error occurred, but error message could not be retrieved fro kanman Case Modding 0 04-25-2009 02:00 PM
CANT GET MAIL GET THIS ERROR MESSAGE TONY ROBERTS Computer Support 3 03-10-2005 04:18 PM
Error message different than Context.Server.GetLastError.Message tshad ASP .Net 0 01-27-2005 06:38 PM
writing a SOAP message service, how do I get the attachment from a message? rabbits77 Java 0 02-26-2004 08:52 PM



Advertisments