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;
}
分享到:
相关推荐
2. **Excel函数基础**:了解基本的数学、逻辑、文本和引用函数至关重要。例如,`SUM()`用于求和,`AVERAGE()`计算平均值,`IF()`执行条件判断,`CONCATENATE()`或`&`进行文本连接,以及绝对引用(如 `$A$1`)在复制...
《Excel 函数与公式速查手册》是一本深入解析Excel函数和公式的实用参考资料,它为用户提供了详尽的函数应用指南。配合提供的数据源,读者可以实践并掌握各种函数的使用方法。这本书覆盖了Excel中的多个核心功能领域...
本教程将深入解析Excel函数的使用,以帮助你更好地理解和应用这些功能。 一、基础函数 1. **SUM**: SUM函数是最基础的求和函数,可以对一系列数值进行加总。例如:`=SUM(A1:A10)` 将计算A1到A10范围内的所有数字的...
通过"Excel函数动画教学",你不仅能掌握上述各种函数的使用,还能通过动画的形式直观理解每一步操作,使学习过程更为轻松愉快。无论是初学者还是有一定基础的用户,都能从中受益,提高Excel技能,从而提升工作效率。...
本参考手册将深入讲解一些关键的Excel函数,帮助你更好地理解和应用它们。 ### 第一部分:文本函数 **1.1 CONCATENATE** `CONCATENATE`函数用于将两个或多个文本字符串合并成一个单一的字符串。例如,如果你有两个...
本资料“EXCEL函数最全应用公式详解+实例”旨在提供一个全面的Excel函数学习指南,通过详尽的解释和实例,帮助用户深入理解和掌握Excel的各项功能。 首先,我们要了解Excel函数的基本构成和分类。函数通常由函数名...
在Excel中,函数是数据分析和处理的核心工具,能够极大地提高工作效率。"EXCEL函数实例活用100谈"这个主题旨在深入浅...通过"EXCEL函数实例活用100谈"的学习,你将成为Excel操作的高手,能够轻松应对各种数据处理任务。
通过学习和分析这些代码,开发者可以更好地理解和掌握在MFC环境中如何与Excel进行交互。 总结起来,MFC-excel.rar提供的示例是一个实用的教程,它展示了如何利用MFC库在C++应用程序中无缝地集成Excel功能。这对于...
使用这样的工具,开发者可以轻松地处理复杂的JSON数据,将其整理成清晰的Excel表格,这对于数据分析、报告制作和自动化任务非常有用。同时,由于是基于VBA,这些功能可以完全定制,以适应特定的业务需求。 在压缩包...
首先,我们要理解Excel函数的基本概念。函数是预定义的公式,它们接受一个或多个参数(单元格引用、数值或文本),然后根据所选的函数类型进行计算,返回一个结果。Excel内建了超过400个内置函数,涵盖了统计分析、...
根据给定文件的信息,我们可以提炼出关于“无师自通 EXCEL函数、图表与数据分析”的一系列重要知识点。尽管部分内容没有提供具体的学习材料或案例,但根据标题和描述,我们可以围绕Excel的数据分析功能展开深入探讨...
首先,`pandas`是一个强大的数据处理库,它提供了`read_excel`函数,使得我们能够轻松地导入Excel文件到DataFrame对象中。DataFrame是一种二维表格型数据结构,拥有行和列索引,类似于电子表格或SQL数据库表。以下是...
在Excel中,函数是强大的工具,能够帮助用户执行各种...在实际工作中,结合不同函数的使用,可以大大提高工作效率,让数据处理变得更加轻松。在学习过程中,可以尝试将这些函数应用到具体的案例中,以加深理解和掌握。
Excel函数的输入方法是Excel电子表格处理中至关重要的技能,它极大地提高了数据处理的效率和准确性。Excel函数的输入主要有两种...理解并熟练运用这些方法,你将能够轻松处理复杂的计算任务,让数据处理变得轻松自如。
首先,我们需要理解Excel和WPS的基本结构。Excel是由Microsoft开发的一款强大的电子表格程序,而WPS Office是金山软件推出的与Excel类似的应用,它们都允许用户进行数据计算、分析和可视化。然而,原生的Excel和WPS...
XLA是Excel的宏库文件格式,其中包含了一系列自定义函数和宏,这些可以在Excel工作簿中调用,以增强其功能。XLL则是Excel的动态链接库文件,它允许开发者编写更复杂、性能更高的自定义函数,通常用于数值计算或与...
3. **设置工作簿**:调用 `setInputEncoding()` 函数来指定文件的编码,然后使用 `read()` 函数来解析Excel文件。例如: ```php $excel->setInputEncoding('UTF-8'); $excel->read('path/to/your/excel_file.xls'...
在给定的标题"ExcelBase_qt基于office读写excel表_ExcelBase_"和描述"qt基于office读写excel,代码简介,易懂"中,我们可以理解这是一个关于使用Qt库与Microsoft Office的Excel接口进行交互的项目。 Qt是一个跨平台...
### Excel调用SAP函数:连接SAP R/3并从MS Excel VBA调用BAPI #### 摘要 本文将详细介绍如何利用Microsoft Excel中的Visual Basic for Applications (VBA)来连接到SAP R/3系统,并从中提取数据。通过一个具体的代码...
通过深入学习并熟练应用这些Excel函数,你可以轻松处理工作中的数据和报表,提高工作效率,让复杂的报告变得简洁明了。在实践中不断探索和尝试,你会发现Excel的函数功能远不止这些,还有许多高级应用等待你去发掘。