多进程-创建

定义

fork

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

int main(int argc, char *argv[]) {
    pid_t fpid;
    int count = 0;

    printf("main() PID:%d", getpid());
    fpid = fork();
    if (fpid < 0) {
        perror("failed to fork:");
        exit(1);
    } else if (fpid == 0) {
        printf("child PID:%d\n", getpid());
        printf("fpid:%d\n", fpid);
        count ++;
    }
    printf("count:%d\n", count);
    return 0;
}

exec函数族

execl

#include <stdio.h>
#include <unistd.h>

// execl执行不带选项的命令pwd
void cmd_fn1(void) {
    execl("/bin/pwd", "pwd", NULL); // 第二个参数argv[0]参数是必须的
    // execl("/bin/pwd", NULL);     // warning
}

// execl执行带选项的命令ls
void cmd_fn2(void) {
    execl("/bin/ls", "ls", "-al", "/", NULL);
}

// main
int main(int argc, char *argv[]) {
    cmd_fn1();
    cmd_fn2();

    // 打印各个参数
    for (int i = 0; i < argc; i++) {
        printf("%s\t", argv[i]);
    }

    // 判断是否带参数-p
    if ((argc == 2) && (strcmp(argv[1], "-p") == 0)) {
        printf("Right CMD\n");
    } else {
        printf("Error CMD\n");
    }

    return 0;
}

execlp

  • 不需要指定命令的全路径,是从PATH环境变量中查找命令

system

源码

posted @ 2022-05-02 06:07  starc的miao  阅读(28)  评论(0)    收藏  举报