linux高编进程------exec函数族

exec函数族的功能是用一个新的进程镜像替换replace当前的进程镜像

在使用的过程中也一定要刷新当前缓冲区。

/*****环境变量*****/
extern char **environ;
/****************************
 * 功能:将新的进程镜像替换当前进程的镜像
 * 参数:执行的二进制文件路径以及参数
 ***************************/
int execl(const char *path, const char *arg, ...);
/****************************
 *功能:将新的进程镜像替换当前进程的镜像
 *参数:执行的二进制文件名字以及参数
 ****************************/
int execlp(const char *file, const char *arg, ...);
/****************************
 *功能:将新的进程镜像替换当前进程的镜像
 *参数:执行的二进制文件路径以及参数并且可以加入环境变量
 ****************************/
int execle(const char *path, const char *arg,..., char * const envp[]);

/********变参**************/
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);

eg:

/**************
 * 功能:打印时戳
 * ***********/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    puts("Begin!");
    //0.刷新缓冲区
    fflush(NULL);
    //1.替换
    execl("/bin/date","date","+%s",NULL);
    //2.失败退出
    perror("execl()");
    exit(1);
    //3.成功不会执行
    puts("End!");
    exit(0);
}

=============================================================

fork与exec函数族的使用

/**************
 * 功能:子进程打印时戳
 *       父进程等待收尸
 * ***********/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    pid_t pid ;
    puts("Begin!");
    //0.刷新缓冲区
    fflush(NULL);
    //1.创建子进程
    pid = fork();
    //2.失败判断
    if(pid < 0)
    {
        perror("fork()");
        exit(1);
    }
    //3.子进程:date
    if(pid == 0)
    {
        execl("/bin/date","date","+%s",NULL);
        //失败退出
        perror("execl()");
        exit(1);
    }
    //4.收尸
    wait(NULL);
    puts("End!");
    exit(0);
}

 

posted @ 2016-03-17 11:50  muzihuan  阅读(319)  评论(0编辑  收藏  举报