关于Linux中exec的一点心得
最近在学习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的一点心得的更多相关文章
- Linux中exec命令相关
Linux中exec命令相关 exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. b ...
- Linux中exec()执行文件系列函数的使用说明
函数原型: 描述: exec()系列函数使用新的进程映像替换当前进程映像. 工作方式没有什么差别, 只是参数传递的方式不同罢了. 说明: 1. 这6个函数可分为两大类: execl( ...
- linux中exec和xargs命令的区别和优劣分析
find的exec及ok命令 exec命令的格式为: exec command {} \; exec后面跟着的是操作命令,然后跟着{}表示每一个参数,然后空格,然后"\;".{}之 ...
- Linux中FTP的一点理解
FTP(File Transfer Protocol)是一个非常古老并且应用十分广泛的文件传输协议,FTP协议是现今使用最为广泛的网络文件共享协议之一,我们现在也一直有在用着FTP协议来进行各种文件的 ...
- linux中$与()的一点使用疑惑解释
a=$(cat 1.sh)等价于a=`cat 1.sh` 而a=(cat 1.sh) 相当于定义一个a数组,内容为cat 1.sha=(`cat 1.sh`)相当于把1.sh里面的内容当成a的数组,a ...
- linux中fork, source和exec的区别
转:linux中fork, source和exec的区别 shell的命令可以分为内部命令和外部命令. 内部命令是由特殊的文件格式.def实现的,如cd,ls等.而外部命令是通过系统调用或独立程序实现 ...
- 转 PHP中exec、system等函数调用linux命令问题
PHP中exec.system等函数调用linux命令问题 先小说两句:今天研究了下PHP调用LINUX命令的功能,一开始怎么做都调用不成功,试了好久才终于成功了,所以发出来分享一下.下面我将详细介绍 ...
- Linux中find常见用法示例 ·find path -option [ -print ] [ -exec -ok command ] {} \;
find命令的参数: pathname: find命令所查找的目录路径.例如用.来表示当前目录,用/来表示系统根目录.-print: find命令将匹配的文件输出到标准输出.-exec: find命令 ...
- linux中历史命令的一点发现
在LINUX中的终端中输入命令之后,这些命令会被存储到一个文件中,在终端中按下 键盘上的向上的箭头就会显示出以前敲击过的命令,最关键的是重起电脑之后依然有效的,这点和 windows上的CMD有着很大 ...
随机推荐
- UVA-11468 Substring(AC自动机+DP)
题目大意:给一些模板串,一些字符的出现概率.问不会出现模板串的概率是多少. 题目分析:是比较简单的概率DP+AC自动机.利用全概率公式递推即可. 代码如下: # include<iostream ...
- JS中的call()方法的理解
fn.call(obj,arg1,arg2);这是call()方法的使用形式,apply()是差不多的.作用是用obj对象来替换fn中的this 举个栗子: function A(){ this.co ...
- 渴切-开源中文css框架
渴切:是国内优秀的开源css框架. 渴切是一个开源中文 (X)HTML/CSS 框架 ,它的目的是减少你的css开发时间.它提供一个可靠的css基础去创建你的项目,能够用于网站的快速设计,通过重设和重 ...
- java多线程之:创建开启一个线程的开销
---->关于时间,创建线程使用是直接向系统申请资源的,这里调用系统函数进行分配资源的话耗时不好说.---->关于资源,Java线程的线程栈所占用的内存是在Java堆外的,所以是不受jav ...
- python3基础语法
一.编码 默认情况下, python3源码文件以UTF-8编码,所有字符串都是unicode字符串.当然你也可以为源码文件指定不同的编码: # -*- coding: gbk -*- 二.标识符 1. ...
- thinkphp3.2 学习
http://www.tuicool.com/articles/nQFnQrR 1,sublime text 增强插件 右键可以打开文件目录 http://www.w3cfuns.com/notes/ ...
- maven&&gradle
https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html http://maven.apache. ...
- 制作和unity调用动态链接库dll文件
首先用vc建立一个dll工程 然后在里面建立一个testunity.h文件.内容如下 1 extern "C" int _declspec(dllexport)testunity( ...
- 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 ...
- PHP GC垃圾回收机制之引用变量回收周期疑问
普通的引用变量的销毁大家都知道, 当unset的时候如果refcount = 0 则认为无用, 销毁. 但是手册中提到一点会有递归引用的问题,很是奇葩 代码如下 <?php $a = 1; $a ...