代码如下:

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>

inline int mySystem(const char *cmd) {
    pid_t pid;
    if(cmd == NULL)    return 1;
    int status;
    if((pid = fork()) < 0)   status = -1;
    else if(0 == pid) {
        execl("/bin/sh","sh","-c",cmd,(char*)0);
        _exit(127);
    }
    else {
        while(waitpid(pid, &status, 0) < 0)
            if(errno != EINTR)   return -1;
    }
    return status;
}

inline void test(const char *cmd) {
    int status;
    if((status = mySystem(cmd)) < 0) {
        puts("system error.");
        exit(0);
    }
    printf("exit status = %d\n", status);
}

int main() {
    test("date");
    test("nosuchcommand");
    test("who; exit 44");
    return 0;
}

输出如下:

自由互联热门推荐:PDF电子发票识别软件,一键识别电子发票并导入到Excel中!10大顶级数据挖掘软件!人工智能的十大作用!

 

linux下使用fork,exec,waitpid模拟system函数

  现在才知道系统的system函数为我们做了那么多的处理。