main(int argc,char*argv[])问题

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
solt
帖子: 3
注册时间: 2009-11-08 9:07

main(int argc,char*argv[])问题

#1

帖子 solt » 2009-11-08 11:20

//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]这里就写不成了,

因为实在菜,还请大家
帮帮忙~~~~~~~~~~
头像
foolegg
帖子: 249
注册时间: 2007-12-01 14:56

Re: main(int argc,char*argv[])问题

#2

帖子 foolegg » 2009-11-08 11:42

1.argv[0]是程序名,在你的例子里就是execlptest

2.不要用execlp,用execvp,大致是

execvp( argv[1], argv[2] );

具体请man函数手册

ps:你还用那个while会变成死循环
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

Re: main(int argc,char*argv[])问题

#3

帖子 cnkilior » 2009-11-08 13:13

贴代码请用code标签。
回复