zoukankan      html  css  js  c++  java
  • Linux exec函数族

    1. 概念:

    exec函数族提供了一种在进程中启动另一个程序执行的方法。
    它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、
    代码段和堆栈段。在执行完之后,原调用进程的内容除了进程号外,其他全部都被替换了

    2. 何时使用exec?

    1)当进程认为自己不能再为系统和用户做出任何贡献了时就可以调用exec函数,让自己执行新的程序

    2)如果某个进程想同时执行另一个程序,它就可以调用fork函数创建子进程,然后在子进程中调用任何一个exec函数。
      这样看起来就好像通过执行应用程序而产生了一个新进程一样

    3.相关函数:
      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[]);
      l : list列表,参数要以列表形式,展现出来。
      p : path路径,从系统环境变量中去找可执行文件
      v : 向量数组,将列表的参数装到数组中去。
      e : 函数传递指定参数envp,允许改变子进程的环境,无后缀e时,子进程使用当前程序的环境。envp也是一个以NULL结尾的字符串数组指针


    4.使用区别:
    1)可执行文件查找方式
      无p:指定完整的文件目录路径,
      有p:只给出文件名,系统会自动从环境变量“$PATH”所包含的路径中进行查找。
    2)参数表传递方式
      有l:表示逐个列举的方式;
      有v:表示将所有参数构造成指针数组传递,其语法为char *const argv[]
    3)环境变量的使用
      exec函数族可以默认使用系统的环境变量,也可以传入指定的环境变量。
      这里,以“e”(Enviromen)结尾的两个函数execle、execve就可以在envp[]中传递当前进程所使用的环境变量,一般为NULL即可

    例子:

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    /*
    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[]);
    int execvpe(const char *file, char *const argv[],
            char *const envp[]);
    */
    
    
    int main(int argc, const char *argv[])
    {
        // 1
        execl("/bin/ls","ls","-l",NULL);
        printf("AAAA
    ");
    // 2 execlp("ls","ls","-l",NULL); // 3 char *buf[] = {"ls","-l",NULL}; execv("/bin/ls",buf); return 0; }

    测试: 只有1 会执行,后面的都不执行, 因为exec启动的进程取代了原来的 数据段,代码段,堆栈段 printf 也不会执行

  • 相关阅读:
    Powershell数据处理
    Powershell About Active Directory Group Membership of a domain user
    Powershell About Active Directory Server
    Oracle Schema Objects——Tables——TableStorage
    Oracle Schema Objects——Tables——TableType
    English Grammar
    Oracle Database Documentation
    Oracle Schema Objects——Tables——Oracle Data Types
    Oracle Schema Objects——Tables——Overview of Tables
    What is Grammar?
  • 原文地址:https://www.cnblogs.com/electronic/p/10932525.html
Copyright © 2011-2022 走看看