exce函数族

       (1)exec函数族说明

        fork()函数用于创建一个子进程,该子进程几乎复制了父进程的全部内容;exec函数族可以用来在一个进程中启动另一个可执行文件,该可执行文件将代替当前进程的执行映像(包括原调用进程的数据段、代码段和堆栈段)。该调用并没有生成新的进程,而是在原有进程的基础上,替换原有进程的正文,调用前后是同一个进程,除了进程号PID不变,其他全部被新的进程替换了。这里的可执行文件既可以是二进制文件,也可以是Linux下的任何可执行的脚本文件。

       (2)exec函数族语法

        所需头文件:

                #include

        六种调用形式:

                int execl(const char *path, const char *arg, ...)

                int execv(const char *path, char *const argv[])

                int execle(const char *path, const char *arg, ..., char *const envp[])

                int execve(const char *path, char *const argv[], char *const envp[])

                int execlp(const char *file, const char *arg, ...)

                int execvp(const char *file, char *const argv[])

        函数返回值:

                -1:出错

        exec函数名对应位含义:

                前4位:均为exec

                第5位:L:参数传递为逐个列举的方式,其语法为const char *arg

                             V:参数传递为构造指针数组的方式,其语法为char *const argv[]

                第6位:E:可传递新进程环境变量

                             P:执行文件查找可以只给出文件名,系统就会自动按照环境变量"$PATH"所指定的路径进行查找

       (3)exec函数族应用举例

                 以下程序实现子进程执行可执行文件,父进程显示执行结果。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
 
int main()
{
    int fd = -1;
    pid_t pid = -1;
    int ret = -1;
 
    pid = fork();
    if (pid == 0)
    {
        printf("\nchild\n");
 
        ret = execlp("sh", "sh", "-c", "ls -l > result.dat", (char *)0);
        if (ret < 0)
        {
            perror("execlp");
            exit(1);
        }
    }
     
    else if (pid > 0)
    {
        wait(NULL);
 
        printf("\nfather\n");
 
        ret = execlp("cat", "cat", "result.dat", (char *)0);
        if (ret < 0)
        {
            perror("execlp");
            exit(1);
        }
    }
 
    else
    {
        perror("fork");
        exit(1);
    }
}

                  其中,ret = execlp("sh", "sh", "-c", "ls -l > result.txt", (char *)0),-c参数为通过字符串读指令。




你可能感兴趣的:(Linux,C)