• linux中execve函数的用法


    在父进程中fork一个子进程,在子进程中调用exec函数启动新的程序。exec函数一共有六个,其中execve为内核级系统调用,其他(execl,execle,execlp,execv,execvp)都是调用execve的库函数。

    #include<unistd.h>

    函数定义 int execve(const char *filename, char *const argv[ ], char *const envp[ ]);

    返回值 函数执行成功时没有返回值,执行失败时的返回值为-1.

    函数说明 execve()用来执行参数filename字符串所代表的文件路径,第二个参数是利用数组指针来传递给执行文件,并且需要以空指针(NULL)结束,最后一个参数则为传递给执行文件的新环境变量数组。

    1. #include<unistd.h>   
    2. main()   
    3. {   
    4.   char *argv[ ]={"ls", "-al", "/etc/passwd", NULL};   
    5.   char *envp[ ]={"PATH=/bin", NULL}   
    6.   execve("/bin/ls", argv, envp);   
    7. }  

    运行结果为:-rw-r--r-- 1 root root 1659 Feb 27 20:13 /etc/passwd

    这与在bin目录下执行 ls -al /etc/passwd 所得到的结果是一样的。

    linux fork()和execve()的区别

    fork是分身,execve是变身。

     exec系列的系统调用是把当前程序替换成要执行的程序,而fork用来产生一个和当前进程一样的进程(虽然通常执行不同的代码流)。通常运行另一个程序,而同时保留原程序运行的方法是,fork+exec。

    看看手册里面的例子就知道怎么用了。

    exec系列的系统调用已经是变成别的程序了,已经和本程序无关了

  • 相关阅读:
    Javaweb 第4 天xml 课程
    Javaweb 第2天 JavaScript课程
    Javaweb 第1天 HTML和CSS课程
    第27天反射(解剖)技术
    Ip 讲解
    第26 天网络编程
    第25天多线程、网络编程
    【剑指offer】连续子数组的最大和,C++实现
    [剑指offer]数组中最小的K个数,C++实现
    【剑指offer】数组中出现次数超过数组长度一半的数字,C++实现
  • 原文地址:https://www.cnblogs.com/jxhd1/p/6706701.html
Copyright © 2020-2023  润新知