fc5 C system call always returning -1

Matt Davey mcdavey at mrao.cam.ac.uk
Fri Sep 22 09:31:18 UTC 2006


On Thu, 2006-09-21 at 17:21 -0700, Greg Frinchaboy wrote:
> This may be an old issue but I could not find info in the archives.
> 
> u_int num_cpus = system("cat /proc/cpuinfo | grep -c processor > 
> /dev/null");
> 
> Has yielded the number of cpus on the system since I used it in RH7.3 
> and fc3.
> Now in fc5, all uses of system("cmd");  return -1
> 
> The command executes OK, just the return value is always -1.
> 
> u_int num_cpus = system("cat /proc/cpuinfo");
> dumps the cpuinfo file to the system console
> 
> u_int num_cpus = system("cat /proc/cpuinfo | grep -c processor");
> dumps a 2 to the system console, etc.
> 
> Any help would be appreciated...
> Greg

your line of code suggests you expect system() to return you an integer
parsed from the console output of your command.  This isn't what system
does:

man system
"The value returned is -1 on error (e.g.  fork() failed), and the return
status of the command otherwise."

"grep -c" puts the count of the matches found on stdout, and returns a
status of zero if something is found and 1 otherwise (and 2 on error).
So I'd expect your "num_cpus" to be zero, typically, and 1 if no
'processor' string was found in /proc/cpuinfo.  Indeed, that's exactly
what happened when I tried it just now.

By the way, at the command line you can use "echo $?" to show the exit
status of the last executed command.

Hope that helps.

Matt Davey		I went to a Grateful Dead Concert and they played 
mcdavey at mrao.cam.ac.uk 	     for SEVEN hours.  Great song.




More information about the fedora-list mailing list