愛悠閑 > linux的system函數

linux的system函數

分類: linux  |  作者: buaa_shang 相關  |  發布日期 : 2014-06-08  |  熱度 : 65°

下面為system函數的一種實現:

#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命令.


快乐彩中奖说明