linuxのsystem関数
1173 ワード
次にシステム関数の実装を示します.
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>
int system(const char *cmdstring)
{
pid_t pid;
int status;
if(cmdstring == NULL) //system
return(1);
if(pid = fork() < 0) //fork
{
status = -1;
}
else if(pid == 0) // .
{
execl("/bin/sh", "sh", "-c", cmdstring, (char *)0); // shell,shell /bin/sh, ,-c shell
_exit(127); // ( cmdstring) .
}
else
{
while(waitpid(pid, &status, 0) < 0) // .
{
if(errno != EINTR)
{
status = -1;
break;
}
}
}
return(status);
}
その中性子プロセスは呼び出しに相当する:/bin/sh-c cmdstring--------cmdstringコマンドを実行する.