最近在学习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. spingmvc 返回json数据日期格式化方法

    第一种: json 用的是这个依赖 <!-- JSON lib 开发包 以及它的依赖包 --> <dependency> <groupId>com.fasterxm ...

  2. C陷阱与缺陷 2

    1,数组 对数组只能进行两种操作,1确定数组的大小,2获得数组第一个元素的指针,其他的操作均是通过指针来实现的. 1 2 3 4 5 6 7 8 9 #include <stdio.h> ...

  3. HDU 2095 find your present (2)

    HDU 2095 find your present (2) 解法一:使用set 利用set,由于只有一个为奇数次,对一个数进行查询,不在集合中则插入,在集合中则删除,最后剩下的就是结果 /* HDU ...

  4. 【BZOJ1004】【HNOI20008】cards

    看黄学长的代码才写出来的,sro_hzwer_orz 原题: 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给 ...

  5. ExtJS 的一些技巧与问题

    1.修改列表(grid)里store的加载url grid.getStore().proxy.conn.url = "xxx.jsp"; grid.getStore().reloa ...

  6. java的nio之:unix内核的五种I/O通信模型

    一:根据unix的网络编程对I/O模型的分类,UNIX提供了5种I/O模型===>阻塞I/O模型:最常用的I/O模型.所有文件操作都是阻塞的.我们以套接字接口为例讲解此模型:在进程空间中调用re ...

  7. 运用@media实现网页自适应中的几个关键分辨率

    http://jingyan.baidu.com/article/6f2f55a1ab36c3b5b83e6c46.html http://www.5imoban.net/jiaocheng/div+ ...

  8. 【转】详解使用tcpdump、wireshark对Android应用程序进行抓包并分析

    原文网址:http://blog.csdn.net/gebitan505/article/details/19044857 本文主要介绍如何使用tcpdump和wireshark对Android应用程 ...

  9. 论文笔记之:Learning to Track: Online Multi-Object Tracking by Decision Making

    Learning to Track: Online Multi-Object Tracking by Decision Making ICCV   2015 本文主要是研究多目标跟踪,而 online ...

  10. HBase 安装过程记录

    http://blog.csdn.net/chenxingzhen001/article/details/7756129 环境: 操作系统Centos 6.4 32-bit 三台节点 ip       ...