C语言中的exec函数族

exec函数系列用新进程替换当前正在运行的进程。它可以通过使用另一个C程序来运行一个C程序。它位于头文件下 unistd。H exec家族中有许多成员,下面举例说明。

null
  • 执行 :使用此命令,创建的子进程不必运行与父进程相同的程序。这个 执行官 类型系统调用允许进程运行任何程序文件,包括二进制可执行文件或shell脚本。 语法:
    int execvp (const char *file, char *const argv[]);

    文件: 指向与正在执行的文件关联的文件名。 argv: 是以null结尾的字符指针数组。

    让我们看一个小例子来说明如何在C中使用execvp()函数。C文件, 执行官。C 执行演示。C 我们将替换execDemo。c和EXEC。通过调用execDemo中的execvp()函数。C

    //EXEC.c
    #include<stdio.h>
    #include<unistd.h>
    int main()
    {
    int i;
    printf ( "I am EXEC.c called by execvp() " );
    printf ( "" );
    return 0;
    }

    
    

    现在,创建EXEC的可执行文件。c使用命令

    gcc EXEC.c -o EXEC

    //execDemo.c
    #include<stdio.h>
    #include<stdlib.h>
    #include<unistd.h>
    int main()
    {
    //A null terminated array of character
    //pointers
    char *args[]={ "./EXEC" ,NULL};
    execvp(args[0],args);
    /*All statements are ignored after execvp() call as this whole
    process(execDemo.c) is replaced by another process (EXEC.c)
    */
    printf ( "Ending-----" );
    return 0;
    }

    
    

    现在,创建execDemo的可执行文件。c使用命令

    gcc execDemo.c -o execDemo

    运行execDemo的可执行文件后。cby使用命令/在演示中,我们得到以下输出:

    I AM EXEC.c called by execvp()
    

    当文件执行演示时。编译c时,只要执行语句execvp(args[0],args),这个程序就会被程序EXEC替换。c、 不打印“Ending-–”,因为只要调用execvp()函数,该程序就会被程序EXEC替换。C

  • execv :这在语法方面也与execvp()函数非常相似。的语法 execv() 如下所示: 语法:
    int execv(const char *path, char *const argv[]);

    路径: 应该指向正在执行的文件的路径。 argv[]: 是以null结尾的字符指针数组。

    让我们看一个小例子来说明如何在C中使用execv()函数。这个例子与上面显示的execvp()的例子类似。我们要两个。C文件, 执行官。C 执行演示。C 我们将替换execDemo。c和EXEC。通过调用execDemo中的execv()函数。C

    //EXEC.c
    #include<stdio.h>
    #include<unistd.h>
    int main()
    {
    int i;
    printf ( "I am EXEC.c called by execv() " );
    printf ( "" );
    return 0;
    }

    
    

    现在,创建EXEC的可执行文件。c使用命令

    gcc EXEC.c -o EXEC

    //execDemo.c
    #include<stdio.h>
    #include<stdlib.h>
    #include<unistd.h>
    int main()
    {
    //A null terminated array of character
    //pointers
    char *args[]={ "./EXEC" ,NULL};
    execv(args[0],args);
    /*All statements are ignored after execvp() call as this whole
    process(execDemo.c) is replaced by another process (EXEC.c)
    */
    printf ( "Ending-----" );
    return 0;
    }

    
    

    现在,创建execDemo的可执行文件。c使用命令

    gcc execDemo.c -o execDemo

    运行execDemo的可执行文件后。c通过使用命令/在演示中,我们得到以下输出:

    I AM EXEC.c called by execv()
    
  • execlp和execl :这两个词的用途相同,但语法有点不同,如下所示: 语法:
    int execlp(const char *file, const char *arg,.../* (char  *) NULL */);
    int execl(const char *path, const char *arg,.../* (char  *) NULL */);
    

    文件: 与正在执行的文件关联的文件名 常量字符*arg 和省略号 :描述指向以null结尾的字符串的一个或多个指针的列表,这些字符串表示可用于已执行程序的参数列表。

    上面显示的相同C程序可以用execlp()或execl()函数执行,它们将执行相同的任务,即用新进程替换当前进程。

  • execvpe和execle :这两个函数也有相同的用途,但它们的语法与exec家族的所有上述成员略有不同。它们的语法如下所示: 语法:
    int execvpe(const char *file, char *const argv[],char *const envp[]);
    
    Syntax:
    int execle(const char *path, const char *arg, .../*, (char *) NULL, 
    char * const envp[] */);
    

    上面显示的语法有一个不同于上述所有exec成员的参数,即。 char*const envp[]: 允许调用方通过参数envp指定已执行程序的环境。 环境: 此参数是指向以null结尾的字符串的指针数组,必须以null指针结尾。其他函数从调用进程中的外部变量environ获取新进程映像的环境。

参考: 执行官(3)手册页

本文由 马扎尔·伊玛目·汗 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享