最近在学习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. UVA-11468 Substring(AC自动机+DP)

    题目大意:给一些模板串,一些字符的出现概率.问不会出现模板串的概率是多少. 题目分析:是比较简单的概率DP+AC自动机.利用全概率公式递推即可. 代码如下: # include<iostream ...

  2. JS中的call()方法的理解

    fn.call(obj,arg1,arg2);这是call()方法的使用形式,apply()是差不多的.作用是用obj对象来替换fn中的this 举个栗子: function A(){ this.co ...

  3. 渴切-开源中文css框架

    渴切:是国内优秀的开源css框架. 渴切是一个开源中文 (X)HTML/CSS 框架 ,它的目的是减少你的css开发时间.它提供一个可靠的css基础去创建你的项目,能够用于网站的快速设计,通过重设和重 ...

  4. java多线程之:创建开启一个线程的开销

    ---->关于时间,创建线程使用是直接向系统申请资源的,这里调用系统函数进行分配资源的话耗时不好说.---->关于资源,Java线程的线程栈所占用的内存是在Java堆外的,所以是不受jav ...

  5. python3基础语法

    一.编码 默认情况下, python3源码文件以UTF-8编码,所有字符串都是unicode字符串.当然你也可以为源码文件指定不同的编码: # -*- coding: gbk -*- 二.标识符 1. ...

  6. thinkphp3.2 学习

    http://www.tuicool.com/articles/nQFnQrR 1,sublime text 增强插件 右键可以打开文件目录 http://www.w3cfuns.com/notes/ ...

  7. maven&&gradle

    https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html http://maven.apache. ...

  8. 制作和unity调用动态链接库dll文件

    首先用vc建立一个dll工程 然后在里面建立一个testunity.h文件.内容如下 1 extern "C" int _declspec(dllexport)testunity( ...

  9. Maximum number of WAL files in the pg_xlog directory (2)

    Jeff Janes: Hi, As part of our monitoring work for our customers, we stumbled upon an issue with our ...

  10. PHP GC垃圾回收机制之引用变量回收周期疑问

    普通的引用变量的销毁大家都知道, 当unset的时候如果refcount = 0 则认为无用, 销毁. 但是手册中提到一点会有递归引用的问题,很是奇葩 代码如下 <?php $a = 1; $a ...