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コマンドを実行する.