您的位置:首页 > 运维架构 > Linux

linux 中的execl的一些简单的理解

2013-04-11 22:57 357 查看
extern int execl(_const char *_path,const char *_argv[],...,NULL)

简单解释:函数execl()返回值定义为整形,如果执行成功将不返回!执行失败返回-1。

参数列表中char *_path为所要执行的文件的绝对路径,从第二个参数argv开始为执行新的文件所需的参数,最后一个参数必须是控指针(我为了简便用NULL代替)。

举个例子:

一 先来个新程序不带参数的简单例子:

//execl.c

#include<stdio.h>

#include<unistd.h>

int main(int argc,char *argv[])

{

int test;

if((test=execl("/home/crosslandy/Linux/exec/hello",argv[1],NULL))==-1)

printf("error\n");

return 0;

}

//hello.c

#include<stdio.h>

int main(int argc,char *argv[])

{

int i;

printf("hello world\n");

for(i=0;i<argc;i++)

{

printf("parameter %d is:%s\n",i,argv[i]);

}

return 0;

}

解释一下:

execl.c文件:

1定义的整形test用来判断execl是否执行成功,如果失败返回-1输出error;

2第一个参数"/home/crosslandy/Linux/exec/hello"为我所要执行的文件的绝对路径(记住在绝对路径后要写上所要执行的文件的文件名);

3第二个参数为所要执行的新文件的第一个参数,本例子即为./hello

4第三个参数为空指针(因为hello这个程序不需要参数所以直接写最后一个参数空指针);

hello.c文件:

地球人都知道的hello world。只不过在后面我加上了执行该文件是在终端所输入的参数argv[]并对其进行输出。

在终端执行的时候结果如下:

[crosslandy@localhost exec]$ ./execl ./hello

hello world

parameter 0 is:./hello

二 再来个带参数的例子:

//execl.c

#include<stdio.h>

#include<unistd.h>

int main(int argc,char *argv[])

{

int test;

if((test=execl("/home/crosslandy/Linux/exec/hello",argv[1],argv[2],NULL))==-1)

printf("error\n");

return 0;

}

//hello.c

#include<stdio.h>

int main(int argc,char *argv[])

{

int i;

printf("hello world\n");

for(i=0;i<argc;i++)

{

printf("parameter %d is:%s\n",i,argv[i]);

}

return 0;

}

解释一下:

新的例子里我只对execl.c进行了小修改即红色部分argv[2],表示在调用execl函数执行新文件时多添加了一个参数。

在终端执行的时候结果如下:

[crosslandy@localhost exec]$ ./execl ./hello first_parameter

hello world

parameter 0 is:./hello

parameter 1 is:first_parameter
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: