导航:首页 > 操作系统 > execl函数linux

execl函数linux

发布时间:2022-09-28 05:29:33

A. linux下execl()进程管理函数的参数理解

/bin/ls 是执行文件, ls,-al。。。。接下去的依次是shell里面的参数0,1。。。。
环境变量的意思就是环境变量。。。

B. linux下exec 函数第一个参数和第二个参数的区别

哪里写的这些...好乱阿..

先解释下基本的:

int main(argc,char * argv[])
main的参数,就是命令行参数.

比如你的可执行文件是test,你希望在程序执行时传入IP地址,那么可以这样:

./test 127.0.0.1

此时,argc =1,argv[1]是就是指向"127.0.0.1"指针(命令参数全部当作字符串来处理的)。
而 argv[0]就代表第一个参数,这里对应的就是"./test"。
argc和argv在mian里面都是可以使用的,出了main的范围就不能使用了。

再来说你提出的第一个地方,exec的问题。

exec实际上包含了一组函数,execl, execlp, execle, execv, execvp, execvpe
具体使用方法,你man execv就可以得到这些函数的使用方法。

exec函数的作用是,产生一个新进程,结束当前进程(具体执行的操作是复制当前进程的一部分数据和权限,然后根据参数启动一个新的进程)。

exec这组函数执行时候,需要提供的参数包括:一个可执行程序的路径,传递给可执行程序的参数。(这里的参数,与刚才说到的main的参数含义相同。)

说到这里应该明白了吧...就一个。

我不知道你要hello world干什么...照你意思给写了个.

第一个,就是你贴出来的代码改动一点点(我这边运行有点问题):

#include <stdio.h>
main(int argc,char* argv[])
{
int i=0
while(i<=argc)
{
printf("arguement %d : %s ",i,argv[i]);
printf("\n");
i++;
}
}

运行程序:
$gcc test.c -o test
$./test hello world
输出结果:
[ksl@myhost WGX]$ ./test hello world
Arguement 0:./test
Arguement 1:hello
Arguement 2:world
Arguement 3:(null)

然后第二个,使用exec的例子,我用execl吧..
文件名是test1.c

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

void main(int argc,char *argv[])
{
printf("This is not exec...");

execl("./test","hello","world",NULL);

//如果exec执行正常,下面的printf将不会被执行
//因为当前进程已经结束,./test将被执行
printf("exec error");
}

输出结果:
[ksl@myhost WGX]$ ./test1
Arguement 0:hello
Arguement 1:world
Arguement 2:(null)

后者并没输出"./test"....就是exec启动的程序,其命令行参数中只有参数.(我也不晓得原因...=.=||)

C. Linux-C语言execl函数的使用问题

在终端里敲:man execl 然后自己看手册...

D. linux中execl()这个函数的具体用法怎么样的啊 希望高人指教,最好能有一个简单的例子

man execl ,,,里面非常的详细,还有例子,比在这里回答方便的多。
以后要多学会用man命令去查询linux中不知道的东西。

E. 谁能解释一下linux下execle函数的用法吗最好能给一个程序例子!

如果你理解execv, 那么execle和他的区别就是, 前者的调用参数是以数组形式给的,而后者则是以列表方式给,也就是execle(path, arg1, arg2, ..., envp), 并且提供了环境变量参数;

#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>

int main()
{
char *envp[]={"PATH=/tmp","USER=shan",NULL};
if(fork()==0)
{
if(execle("/bin/dir","dir",NULL,envp)<0)
perror("execle error!");
}
return 0;
}

F. linux C语言 exec函数的相关问题

直接把宏定义成字符串啊,就可以了
#define FILEPATHA $(HOME)/

#define FILEPATHB “Elevator/floor_three”

char* FILEPATH=NULL;
FILEPATH=(char*)malloc(30);
memcpy(FILEPATH,A,strlen(A));//拼接字符串
strcat(FILEPATH,B);

G. linux中进程的vfork()和execl()函数

写两个测试程序测试一下,在程序里面加log。
自己调试才会理解深刻。
很简单的一个进程编写问题。

H. linux中为什么在fork里面execl呢

因为exec系列的函数(包括execl函数)都是将当前进程替换成新进程,也就是说新进程启动后原来的进程就不存在了,exec系列函数后面的那些代码就不会再执行了。如果你不放在fork子进程里面,那主进程在执行execl函数后就完全不存在了,所以exec系列函数的使用都是先fork然后在子进程里面调用。

I. Linux编程问题,execl("/bin/ls", "ls", "-al", "/etc/passwd", (char *) 0);

execl,l代表list,参数表的意思,
(char *) 0,代表空指针,说明参数表结束。
这个函数的原型是可变参数,空指针给库解析参数的时候防止程序错误。execl是个库函数,真正的系统调用是execve。

J. linux 系统中execl的作用是

intexecl(constchar*path,constchar*arg,...);

是系统提供的接口函数

execl是exec函数族中的一员

exec族函数的功能是加载一个新的程序替换掉当前的进程

它可以调用一个外部程序到当前的进程空间里

但不会产生一个新的进程(它只是将当前进程的映像替换成新加载的程序的映像)


可以写一个程序清楚地看到

d.c

#include<stdio.h>
#include<unistd.h>

intmain(intargc,char**argv)
{
printf("pid=%dppid=%d ",getpid(),getppid());

return0;
}

f.c

#include<stdio.h>
#include<unistd.h>

intmain(intargc,char**argv)
{
printf("pid=%dppid=%d ",getpid(),getppid());
execl("./d","d",NULL);

return0;
}

在未执行execl调用之前和执行execl之后pid和ppid完全相同

由此可见execl并没有创建新的进程

阅读全文

与execl函数linux相关的资料

热点内容
五菱宏光空调压缩机 浏览:64
为什么app占用几百兆 浏览:676
自动解压失败叫我联系客服 浏览:482
易语言新手源码 浏览:456
oa服务器必须有固定ip地址 浏览:42
传奇源码分析是什么 浏览:267
解放压缩机支架 浏览:255
程序员秃顶搞笑相遇 浏览:6
IBM手机app商店叫什么名字 浏览:834
jpeg压缩质量 浏览:774
云服务器评测对比 浏览:145
java日期转string 浏览:221
openfire源码编译 浏览:897
在线小工具箱引流网站源码 浏览:337
非科班程序员自学 浏览:801
压缩泡沫鞋底底材 浏览:221
程序员职场第一课2正确的沟通 浏览:681
遇到不合法app应该怎么办 浏览:92
汇编程序编译后的文件 浏览:81
大智慧均线源码 浏览:374