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并没有创建新的进程