exec族函数的作用
我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时,该进程被完全替换为新程序。因为调用exec函数并不创建新进程,所以前后进程的ID并没有改变。
详细参考精彩博文:
exec族函数精彩博文
直接上例子:
echoarg.c
#include <stdio.h>
int main(int argc,char *argv[])
{
int i = 0;
for(i = 0; i < argc; i++)
{
printf("argv[%d]: %s\n",i,argv[i]);
}
return 0;
}
结果:
这只是一个传参的例子,编译生成一个可执行文件
execl.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
printf("before execl!\n");
if(execl("./echoarg","echoarg","abvfd",NULL) == -1)
{
printf("execl failed!\n");
perror("why");
}
printf("after execl!\n");
return 0;
}
结果:
既然exec函数族执行的是一个可执行文件,那么linux底下的ls执行也是一个可执行文件,那么我们就用exec函数来调用一下linux底下的相关指令。
ls:
#include <stdio.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
printf("this is ls\n");
if(execl("/bin/ls","ls",NULL) == -1)
{
printf("no this file\n");
}
printf("after execl\n");
return 0;
}
结果:
这样就把指令ls给调用起来了。
ls -al:
#include <stdio.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
printf("this is ls\n");
if(execl("/bin/ls","ls","-a