对于家庭作业,我必须编写一个基本的 shell,包括重定向。该程序使用 readline 提示输入,解析输入字符串,并将其分解为可执行文件名称、参数和输入/输出文件(如果适用)。解析字符串后,它分叉并将子 execv() 分配给传入的可执行文件。我使用 dup2() 在分叉之后和 execv 之前更改文件描述符,但是一旦出现问题程序已执行到新的可执行文件。如果在我的 shell 中运行ls > foo.out
,我会得到:ls: cannot access H��y�A�
$ L��H)�I��$�: No such file or directory
c->argv的构建:
char *args[6];
int i;
for(i=0;i<=4;i++){
char *_arg=strsep(&_str_cmd," ");
printf("Found _arg: %s\n",_arg);
// If there is an argument and it is not blank
if(_arg && strcmp(_arg,"")!=0){
if(strcmp(_arg,"<")==0){
_cmd.infile=strsep(&_str_cmd," ");
i--;
continue;
}
else if(strcmp(_arg,">")==0){
_cmd.outfile=strsep(&_str_cmd," ");
i--;
continue;
}
}
else{break;}
}
args[i]=(char*)0;
_cmd.binary=args[0];
memcpy(_cmd.argv,args,sizeof _cmd.argv);