//execlptest.c
#include<errno.h>
#include<error.h>
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>
#include<string.h>
char command[256];
void main()
{
int rtn;
while(1){
printf(">");
fgets(command,256,stdin);
command[strlen(command)-1];
if(fork()==0){
execlp(command,command,NULL);
perror(command);
exit(-1);
}else{
wait(&rtn);
printf("child process return %d\n",rtn);
}
}
}
编译这个函数:gcc -o execlptest execlptest.c
运行:./execlptest
运行结果:
> ls -l /etc
child process return 62580
> exit
child process return 62580
怎么用带参数的main():即main(int argc,char*argv[])改写这个程序,
使得只要从终端输入一次性./execlptest ls -l /etc就可以了,
就是运行的时候printf(">");
fgets(command,256,stdin);
这两行要输入,改写使得只在终端一次性输入
搜了main()的两个参数的意思:
argc是命令行总的参数个数
argv[]是argc个参数
我是怎样想的:
.......
void mian(int argc ,char*argv[])
{
int rtn;
while(1){
execlp(argv[0],argv[1],......,argv[argc-1],NULL);
..............
}
是不是从终端输入的./execlptest ls -l /etc传给了argv[]数组
然后直接execlp(argv[0],argv[1],......,argv[argc-1],NULL);就行了
可是参数的个数argc不确定,那argv[0],argv[1],......,argv[argc-1]这里就写不成了,
因为实在菜,还请大家
帮帮忙~~~~~~~~~~
main(int argc,char*argv[])问题
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
-
- 帖子: 3
- 注册时间: 2009-11-08 9:07
- foolegg
- 帖子: 249
- 注册时间: 2007-12-01 14:56
Re: main(int argc,char*argv[])问题
1.argv[0]是程序名,在你的例子里就是execlptest
2.不要用execlp,用execvp,大致是
execvp( argv[1], argv[2] );
具体请man函数手册
ps:你还用那个while会变成死循环
2.不要用execlp,用execvp,大致是
execvp( argv[1], argv[2] );
具体请man函数手册
ps:你还用那个while会变成死循环
- cnkilior
- 论坛版主
- 帖子: 4984
- 注册时间: 2007-08-05 17:40
Re: main(int argc,char*argv[])问题
贴代码请用code标签。