linux进程通信 中的exec问题
发布网友
发布时间:2022-04-20 18:08
我来回答
共1个回答
热心网友
时间:2023-04-25 15:13
哪里写的这些...好乱阿..
先解释下基本的:
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启动的程序,其命令行参数中只有参数.(我也不晓得原因...=.=||)