exec函数族

简介:

exec函数族提供了一个在进程中启动另外一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段,代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了。另外,这里的可执行文件既可以是二进制文件,也可以是Linux下任何可执行的脚本文件。

exec函数族的返回值:

exec函数族调用成功无返回,调用失败返回-1.

exec函数原型:

int execl(const char * path,const char * arg,…);

参数说明:

path:要执行的程序路径。

arg  :程序的第0个参数,即程序名自身。相当于argv【0】。

 ...   :命令行参数列表。调用相应程序时有多少命令行参数,就需要有多少个输入参数项。注意:在使用此类函数时,在所有命令行参数的最后应该增加一个空的参数项(NULL),表明命令行参数结束。

 

printfagrv.c程序文件如下:

#include <stdio.h>

int main (int agrc,char *agrv[])
{
    int i;

    for(i=0;i<agrc;i++)
    {
         printf("agrv[%d] = %s\n",i,agrv[i]);//打印命令行参数

    }



   return 0;
}

使用execl函数调用该程序文件:

#include <stdio.h>
#include <unistd.h>

int main ()
{

        printf("before execl!\n");

        if( execl("/home/lzw/processLesson/printfargv","printfargv","this","is","a","test",NULL) == -1)
        {

                printf("execl fail\n");


        }

        printf("after execl!\n");//如果execl执行成功,这句话是不会打印的。因为该进程被替换成新的进程。


        return 0;
}

使用execl调用系统 ls 指令,先使用whereis指令查看 ls指令存放的路径。

#include <stdio.h>
#include <unistd.h>
#include <errno.h>


int main ()
{

        printf("before execl!\n");

        if( execl("/bin/ls","ls","-l",NULL) == -1)
        {

                printf("execl fail\n");
                perror("error:");


        }

        printf("after execl!\n");//如果execl执行成功,这句话是不会打印的。因为该进程被替换成新的进程。


        return 0;
}

使用execl调用date指令,先用whereis查看date指令存放的位置

#include <stdio.h>
#include <unistd.h>
#include <errno.h>


int main ()
{

        printf("the system time is !\n");

        if( execl("/bin/date","date",NULL) == -1)
        {

                printf("execl fail\n");
                perror("error:");


        }

        printf("after execl!\n");//如果execl执行成功,这句话是不会打印的。因为该进程被替换成新的进程。


        return 0;
}

环境变量的配置:

查看环境变量指令: echo $PATH

配置环境变量:export    PATH= $PATH:/home/xxx/test(冒号后面的路径是你需要加的路径)

 

上一篇:微信公众平台企业号开发—开启回调模式


下一篇:微信分享 带图片的的链接