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 所得到的结果是⼀样的。
fork是分⾝,execve是变⾝。
linux字符串转数组exec系列的系统调⽤是把当前程序替换成要执⾏的程序,⽽fork⽤来产⽣⼀个和当前进程⼀样的进程(虽然通常执⾏不同的代码流)。通常运⾏另⼀个程序,⽽同时保留原程序运⾏的⽅法是,fork+exec。
看看⼿册⾥⾯的例⼦就知道怎么⽤了。
exec系列的系统调⽤已经是变成别的程序了,已经和本程序⽆关了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论