What Unix box are you using? I have never known G_system() to fail before.
Perhaps they way the system() call has to be implemented on your platform
differs from the way other version of Unix do it? Here is the G_system()
call. As far as I can tell it should be identical to the way system()
is implemented except for the signal handling (which is added).
/****************************************************************/
#include <signal.h>
#include <stdio.h>
G_system (command)
char *command;
{
int status, pid, w;
void (*sigint)(), (*sigquit)() ; /* new */
sigint = signal (SIGINT, SIG_IGN); /* new */
sigquit = signal (SIGQUIT, SIG_IGN); /* new */
fflush (stdout);
fflush (stderr);
if ( (pid = fork()) == 0)
{
signal (SIGINT, SIG_DFL); /* new */
signal (SIGQUIT, SIG_DFL); /* new */
execl ("/bin/sh", "sh", "-c", command, 0);
_exit(127);
}
if (pid < 0)
{
fprintf (stderr, "WARNING: can not create a new process\n");
status = -1;
}
else
{
while ( (w = wait (&status)) != pid && w != -1)
;
if (w == -1)
status = -1;
}
signal (SIGINT, sigint); /* new */
signal (SIGQUIT, sigquit); /* new */
return (status);
}
|
|
|I am trying to use G_system command to fork a process or to call
|an external module. It does not seem to work. However if I use system call
|it does work. Any one can explain why it is doing?
|
|Thanks.
|
|Srinivasan.
|srin@brcsun1.tamu.edu
|
|
-----------------------------------------------------------------
Michael Shapiro U.S. Army CERL
email: shapiro@zorro.cecer.army.mil Environmental Division
phone: (217) 352-6511 ext 526 P.O. Box 9005
fax: (217) 373-7222 Champaign, Ill. 61826-9005
-----------------------------------------------------------------