最近在学习linux操作系统中的相关知识,在使用execlp系统调用时,发现了些有趣的东西。

首先,关于execlp函数的用法:

int execlp(const char *file, const char *arg, ...);

第一个参数是,可执行文件的路径;第二个参数是,可执行程序的程序名,其余参数是命令函的参数,通常最后一个参数是一个空指针NULL(用来表示命令行数组的结尾).

例如:execlp("echo", "echo", "executed by execlp", NULL);与直接在终端输入echo executed by execlp效果是一样的,实际也是调用该指令.

表示运行名为echo的可执行文件,其中第三个参数表示命令的参数(因为第一个参数往往是bin文件中的可执行的命令,此处参数为该命令的参数);但最好最后的参数NULL

用char*(0)来表示(因为在c语言中null实际上是一个宏,#define NULL void*(0),而void*可以隐式的转换成其他类型的指针).但第一个参数必须是完整路径,此处直接为echo是因为Linux系统的path环境变量默认是根目录中的bin文件夹下.

但是,该如何理解命令行参数呢?事实上,它是指的程序在命令行中运行所需要的参数,例如:ls -l中的-l就是一种命令行参数.

在exec其他函数的参数中有char **argv参数用来存储与该程序有关的命令行参数,该变量中第一个参数是该程序的名称,即上述char *arg,剩下的才是命令行参数.

(实际上,我在实践时发现程序名称可以为任意值且结果是相同的;即第二个参数可任意?但在使用时最好还是将其设置为可执行文件的名称)

这些参数与c语言中main函数的参数类似,int main(int argc,char **argv),其中agrc表示argv中元素的个数,agrv同上述的基本相同;在运行c语言编写的可执行文件中,即可添加命令行参数(但与execlp不同的是,argv中第一个参数一定是程序的名字)。例如:a.exe a 20,表示argv[0] ="a.exe",argv[1]="a",且argc = 3,这些参数就能与程序内部联系起来了。(也可以联想到java中main方法的参数值也是类似的).

总之,execlp能调用一些系统命令,就是利用这些参数的值来确定.

此外,还存在exec系列还存在execl,execle,execvp,execve,execv函数,与execlp用法相差不大,参数上可能有所不同.

关于Linux中exec的一点心得的更多相关文章

  1. Linux中exec命令相关

    Linux中exec命令相关 exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. b ...

  2. Linux中exec()执行文件系列函数的使用说明

    函数原型: 描述:    exec()系列函数使用新的进程映像替换当前进程映像.    工作方式没有什么差别, 只是参数传递的方式不同罢了. 说明:    1. 这6个函数可分为两大类: execl( ...

  3. linux中exec和xargs命令的区别和优劣分析

    find的exec及ok命令 exec命令的格式为: exec command {} \; exec后面跟着的是操作命令,然后跟着{}表示每一个参数,然后空格,然后"\;".{}之 ...

  4. Linux中FTP的一点理解

    FTP(File Transfer Protocol)是一个非常古老并且应用十分广泛的文件传输协议,FTP协议是现今使用最为广泛的网络文件共享协议之一,我们现在也一直有在用着FTP协议来进行各种文件的 ...

  5. linux中$与()的一点使用疑惑解释

    a=$(cat 1.sh)等价于a=`cat 1.sh` 而a=(cat 1.sh) 相当于定义一个a数组,内容为cat 1.sha=(`cat 1.sh`)相当于把1.sh里面的内容当成a的数组,a ...

  6. linux中fork, source和exec的区别

    转:linux中fork, source和exec的区别 shell的命令可以分为内部命令和外部命令. 内部命令是由特殊的文件格式.def实现的,如cd,ls等.而外部命令是通过系统调用或独立程序实现 ...

  7. 转 PHP中exec、system等函数调用linux命令问题

    PHP中exec.system等函数调用linux命令问题 先小说两句:今天研究了下PHP调用LINUX命令的功能,一开始怎么做都调用不成功,试了好久才终于成功了,所以发出来分享一下.下面我将详细介绍 ...

  8. Linux中find常见用法示例 ·find path -option [ -print ] [ -exec -ok command ] {} \;

    find命令的参数: pathname: find命令所查找的目录路径.例如用.来表示当前目录,用/来表示系统根目录.-print: find命令将匹配的文件输出到标准输出.-exec: find命令 ...

  9. linux中历史命令的一点发现

    在LINUX中的终端中输入命令之后,这些命令会被存储到一个文件中,在终端中按下 键盘上的向上的箭头就会显示出以前敲击过的命令,最关键的是重起电脑之后依然有效的,这点和 windows上的CMD有着很大 ...

随机推荐

  1. PHP部分---字符串处理(文中例子不断更新);

    字符串处理: 1.去除   ltrim(),rtrim()函数  trim()函数 trim(字符串名)函数:--去掉字符串两边的空格 ltrim(字符串名,“特殊字符”);--去除字符串左边的空格和 ...

  2. Oracle数据库五种约束

    oracle 数据库 数据表的5个约束类型:1.主键约束2.外键约束3.唯一约束4.检查约束5.非空约束 主键约束:用来唯一标示表中的一个列,一个表中的主键约束只能有一个,但是可以在一个主键约束中包含 ...

  3. PHP的一些要点

    1.用户评论的内容应当使用htmlspecialchars()函数进行过滤,如htmlspecialchars($_POST['content']);再写入数据库,防止用户评论中含有JS和HTML代码 ...

  4. C语言指针与数组的定义与声明易错分析

    部分摘自<C语言深度解剖> 1.定义为数组,声明为指针 在文件1中定义: char a[100]; 在文件2中声明: extern char *a; //这样是错误的 这里的extern告 ...

  5. Awesome Deep Vision

    Awesome Deep Vision  A curated list of deep learning resources for computer vision, inspired by awes ...

  6. caffe: fuck compile error again : error: a value of type "const float *" cannot be used to initialize an entity of type "float *"

    wangxiao@wangxiao-GTX980:~/Downloads/caffe-master$ make -j8find: `wangxiao/bvlc_alexnet/spl': No suc ...

  7. ps图层混合模式

    溶解: ------------- 变暗:当使用该模式时,图像中的颜色或物体,总是其中颜色比较深的覆盖比较浅的,而数值相同或更深的像素不受影响.但记住,是上层针对下层,也就是说要有两个图层才有用 正片 ...

  8. FreeSWITCH安装报错“You must install libyuv-dev to build mod_fsv”的解决方案

    昨天下午安装FreeSWITCH时遇到该问题时,整了一个下午都没解决,也走了许多弯路.如果直接通过yum安装libyuv-devel时,会报错说找不到该安装包.后来又通过FreeSWITCH官网的网上 ...

  9. Optimize Managed Code For Multi-Core Machines

    Parallel Performance Optimize Managed Code For Multi-Core Machines Daan Leijen and Judd Hall This ar ...

  10. AndroidStudio导入项目常见问题

    问题一: 解决:少了依赖的路径 问题二: 解决:把runProguard 改成minfyEnable 来源:http://blog.csdn.net/pengkv/article/details/44 ...