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
简单解释:函数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
相关文章推荐
- 初学Linux的一些理解及简单介绍
- 孵化器的一些简单理解
- 1217File类简单的一些知识的理解
- 我对嵌入式一些概念名词简单的理解
- linux中有关环境变量的一些理解
- 对指针数组,数组指针,函数指针数组,函数数组指针的一些简单理解
- 【php】对PHPExcel一些简单的理解
- Java中多态的一些简单理解
- Linux一些简单的命令
- rh442 - Linux下性能监控命令vmstat的简单理解
- Linux 中的Makefile 的一些简单使用
- 自己对回调函数的一些简单理解
- 从零开始把一些简单的不易理解的记录下来。
- SLAM 算法的一些简单的介绍和理解,有的是从别的地方找到的资料,感觉很有道理。
- 一些简单的linux习题(可做复习用)三
- Linux下一些简单命令的收集
- 关于redis的一些简单理解和应用
- 关于范式的一些简单理解
- linux权限的一些简单总结
- 对流式计算技术的一些简单理解