`

让您轻松理解execl函数系列 ^_^

阅读更多
execl函数功能如下:启动一个可执行文件,并且对他进行传送参数。一些原型如下
 #include <unistd.h>

       extern char **environ;

       int execl(const char *path, const char *arg, ...);
       int execlp(const char *file, const char *arg, ...);
       int  execle(const  char  *path,  const  char  *arg  , ..., char * const
       envp[]);
       int execv(const char *path, char *const argv[]);
       int execvp(const char *file, char *const argv[]);



一开始我们会被他的种类繁多所迷惑,我到底该用哪个?每个的具体意义是什么?这里我将以宏观的角度想让大家有个意识上的认识:

假设我们要启动一个程序,那么不可避免的要给他传递一个函数。

我们需要的是,如何指定一个程序的位置,如果传递参数给他。

对于程序位置的指定,理想状态有两种情况,


1、绝对路径的直径,比如有个程序在C盘,那就C:/程序名

2、在环境变量里搜索,比如环境变量path=c:/bin;d:/bin,我们只需提供程序的名字,他就可

自动到这些路径下搜索


OK,根据以上两条,你就可以判断exec后缀p的区别了,分别是以p作为结果的,都是在环境变

量里搜索

那么在参数方面,我们希望可以一个个指定,比如 "a","b","c",在表示结束时用个(char*)0;

当然最终这些都要转变为一个字符指针数组形式,以上变成 char *arg[]={"a","b","c",

NULL},否则函数的参数的长度对系统来说就不好确定了,比如一些压栈上的空间确定等等。

,可能有人会说变成参数,这里是两码事,参考我BLOG中的《va_list使用的简单范例》

OK,根据这条,我们可以确定后缀为l的表示list arg,后缀为v的表示字符指针数组。

不管list arg输入如何,最后都要被转变为v的形式,所以他们之间的图可以表示如下


execlp	  		execl	  		execle

构造argv			构造argv        		构造argv

execvp 试每一个path前缀->execv 使用environ->	execve(系统调用)


还有个是后缀为e的,表示接用其他用户的环境变量。这个代码没试过,没具体了解。知道的朋友还请提供资料哦^_^

最后,我提供了一段代码如下,大家只要根据上面的一些规则,就对其中的写法不会感到陌生了。多试几次吧^_^

/*
假设我系统里有/home/oracle/bin/child.exe这个程序,path目录包括了/home/oracle/bin/
*/
int main(int argc ,char **argv)
{
	pid_t	pid;
	
	if ((pid = fork()) < 0) 
	{
		cout<<"fork err"<<endl;
		return 0;
	} 
	else if (pid == 0) 
	{	// specify pathname, specify environment 
		//int  execle(const  char  *path,  const  char  *arg  , ..., char * const
    //   envp[]);
		if (execle("/home/oracle/bin/child.exe", "execle", "A",
				(char *)0, env_init) < 0)
		{
			cout<<"execle err"<<strerror(errno)<<endl;
			return 0;	
		}
	}
	
	if (waitpid(pid, NULL, 0) < 0)
	{
		cout<<"waitpid err"<<endl;
		return 0;	
	}

	if ((pid = fork()) < 0) 
	{
		cout<<"fork err"<<endl;
		return 0;	
	} 
	else if (pid == 0) 
	{	/* specify filename, inherit environment */
		if (execlp("child.exe", "execlp", "A", (char *)0) < 0)
		{
			cout<<"execlp err:"<<strerror(errno)<<endl;
			return 0;				
		}
	}	
	///home/oracle/bin
	if (waitpid(pid, NULL, 0) < 0)
	{
		cout<<"waitpid err"<<endl;
		return 0;	
	}

	if ((pid = fork()) < 0) 
	{
		cout<<"fork err"<<endl;
		return 0;	
	} 
	else if (pid == 0) 
	{	/* specify filename, inherit environment */
		/*
		if (execl("/home/oracle/bin/child.exe", "execl", "a", (char *)0) < 0)
		{
			cout<<"execlp err:"<<strerror(errno)<<endl;
			return 0;				
		}
		*/
		if (execl("/bin/ls", "ls", "-al", "/home/oracle/bin/child.exe", (char *)0) < 0)
		{
			cout<<"execlp err:"<<strerror(errno)<<endl;
			return 0;				
		}
	}
	
	//int execv(const char *path, char *const argv[]);
	char *execv_arg[]={"execv","a",NULL};
	if (waitpid(pid, NULL, 0) < 0)
	{
		cout<<"waitpid err"<<endl;
		return 0;	
	}

	if ((pid = fork()) < 0) 
	{
		cout<<"fork err"<<endl;
		return 0;	
	} 
	else if (pid == 0) 
	{	/* specify filename, inherit environment */
		if (execv("/home/oracle/bin/child.exe", execv_arg) < 0)
		{
			cout<<"execv err:"<<strerror(errno)<<endl;
			return 0;				
		}
	}		
	
	
	return 0;
}
3
0
分享到:
评论

相关推荐

    2021新函数excel函数公式大全模板教程电子表格Excel office wps

    2. **Excel函数基础**:了解基本的数学、逻辑、文本和引用函数至关重要。例如,`SUM()`用于求和,`AVERAGE()`计算平均值,`IF()`执行条件判断,`CONCATENATE()`或`&`进行文本连接,以及绝对引用(如 `$A$1`)在复制...

    Excel 函数与公式速查手册(配套数据源)

    《Excel 函数与公式速查手册》是一本深入解析Excel函数和公式的实用参考资料,它为用户提供了详尽的函数应用指南。配合提供的数据源,读者可以实践并掌握各种函数的使用方法。这本书覆盖了Excel中的多个核心功能领域...

    excel函数精解

    本教程将深入解析Excel函数的使用,以帮助你更好地理解和应用这些功能。 一、基础函数 1. **SUM**: SUM函数是最基础的求和函数,可以对一系列数值进行加总。例如:`=SUM(A1:A10)` 将计算A1到A10范围内的所有数字的...

    Excel函数动画教学

    通过"Excel函数动画教学",你不仅能掌握上述各种函数的使用,还能通过动画的形式直观理解每一步操作,使学习过程更为轻松愉快。无论是初学者还是有一定基础的用户,都能从中受益,提高Excel技能,从而提升工作效率。...

    Excel函数参考手册

    本参考手册将深入讲解一些关键的Excel函数,帮助你更好地理解和应用它们。 ### 第一部分:文本函数 **1.1 CONCATENATE** `CONCATENATE`函数用于将两个或多个文本字符串合并成一个单一的字符串。例如,如果你有两个...

    EXCEL函数最全应用公式详解+实例

    本资料“EXCEL函数最全应用公式详解+实例”旨在提供一个全面的Excel函数学习指南,通过详尽的解释和实例,帮助用户深入理解和掌握Excel的各项功能。 首先,我们要了解Excel函数的基本构成和分类。函数通常由函数名...

    EXCEL函数实例活用100谈

    在Excel中,函数是数据分析和处理的核心工具,能够极大地提高工作效率。"EXCEL函数实例活用100谈"这个主题旨在深入浅...通过"EXCEL函数实例活用100谈"的学习,你将成为Excel操作的高手,能够轻松应对各种数据处理任务。

    MFC-excel.rar_Excel MFC_MFC_MFC EXCEL_MFC access excel_excel

    通过学习和分析这些代码,开发者可以更好地理解和掌握在MFC环境中如何与Excel进行交互。 总结起来,MFC-excel.rar提供的示例是一个实用的教程,它展示了如何利用MFC库在C++应用程序中无缝地集成Excel功能。这对于...

    VBA-JSON-2.3.1_JSON_Windows编程_jsonexcel_ExcelVBA_circleinn_

    使用这样的工具,开发者可以轻松地处理复杂的JSON数据,将其整理成清晰的Excel表格,这对于数据分析、报告制作和自动化任务非常有用。同时,由于是基于VBA,这些功能可以完全定制,以适应特定的业务需求。 在压缩包...

    excel函数综合运用---完整版

    首先,我们要理解Excel函数的基本概念。函数是预定义的公式,它们接受一个或多个参数(单元格引用、数值或文本),然后根据所选的函数类型进行计算,返回一个结果。Excel内建了超过400个内置函数,涵盖了统计分析、...

    无师自通 EXCEL函数、图表与数据分析

    根据给定文件的信息,我们可以提炼出关于“无师自通 EXCEL函数、图表与数据分析”的一系列重要知识点。尽管部分内容没有提供具体的学习材料或案例,但根据标题和描述,我们可以围绕Excel的数据分析功能展开深入探讨...

    Excel_pythonexcel画图_pythonexcel_excel调用_python画图_

    首先,`pandas`是一个强大的数据处理库,它提供了`read_excel`函数,使得我们能够轻松地导入Excel文件到DataFrame对象中。DataFrame是一种二维表格型数据结构,拥有行和列索引,类似于电子表格或SQL数据库表。以下是...

    excel函数应用例子

    在Excel中,函数是强大的工具,能够帮助用户执行各种...在实际工作中,结合不同函数的使用,可以大大提高工作效率,让数据处理变得更加轻松。在学习过程中,可以尝试将这些函数应用到具体的案例中,以加深理解和掌握。

    Excel函数的输入方法_1.docx

    Excel函数的输入方法是Excel电子表格处理中至关重要的技能,它极大地提高了数据处理的效率和准确性。Excel函数的输入主要有两种...理解并熟练运用这些方法,你将能够轻松处理复杂的计算任务,让数据处理变得轻松自如。

    网络函数库-excel、wps用

    首先,我们需要理解Excel和WPS的基本结构。Excel是由Microsoft开发的一款强大的电子表格程序,而WPS Office是金山软件推出的与Excel类似的应用,它们都允许用户进行数据计算、分析和可视化。然而,原生的Excel和WPS...

    EXCEL.zip_excel 计算_racegof_waspcn.x_热动软件开发_焓

    XLA是Excel的宏库文件格式,其中包含了一系列自定义函数和宏,这些可以在Excel工作簿中调用,以增强其功能。XLL则是Excel的动态链接库文件,它允许开发者编写更复杂、性能更高的自定义函数,通常用于数值计算或与...

    php-excel-reader-2.21.rar_excel_excel_reader2._php excel_php ex

    3. **设置工作簿**:调用 `setInputEncoding()` 函数来指定文件的编码,然后使用 `read()` 函数来解析Excel文件。例如: ```php $excel-&gt;setInputEncoding('UTF-8'); $excel-&gt;read('path/to/your/excel_file.xls'...

    ExcelBase_qt基于office读写excel表_ExcelBase_

    在给定的标题"ExcelBase_qt基于office读写excel表_ExcelBase_"和描述"qt基于office读写excel,代码简介,易懂"中,我们可以理解这是一个关于使用Qt库与Microsoft Office的Excel接口进行交互的项目。 Qt是一个跨平台...

    excel 调用SAP  函数

    ### Excel调用SAP函数:连接SAP R/3并从MS Excel VBA调用BAPI #### 摘要 本文将详细介绍如何利用Microsoft Excel中的Visual Basic for Applications (VBA)来连接到SAP R/3系统,并从中提取数据。通过一个具体的代码...

    excel 函数学习

    通过深入学习并熟练应用这些Excel函数,你可以轻松处理工作中的数据和报表,提高工作效率,让复杂的报告变得简洁明了。在实践中不断探索和尝试,你会发现Excel的函数功能远不止这些,还有许多高级应用等待你去发掘。

Global site tag (gtag.js) - Google Analytics