0
我想在C语言中为OS项目构建一个shell。当我做重定向部分时,问题即将到来。 ls
工作正常,但是当我做ls > somefile
。它给我一个错误“ls:can not access>:没有这样的文件或目录”。这里是我的代码部分execvp,ls的输出重定向
while(in){
argv[c]=strdup(in); \\in is output of strtok applied on input string
in=strtok(NULL,"\n , ");
c++;
}
argv[c]=NULL;
int rc=fork();
if(rc==0){
int flag = 0;
int index = 0;
int i;
for(i= 0; i <c;i++)
{
if(strcmp(argv[i],">") == 0)
{
flag = 1;
index = i+1;
}
}
if(flag == 1)
{
fclose(stdout);
fopen(argv[index],"w+");
}
execvp(argv[0],argv);
}
else if(rc>0){
(void) wait(NULL);}
}
return 0;
}
我想我看到了问题。我没有删除重定向参数。是的,我假设fopen会将描述符1分配给新文件。我不知道如何以其他方式做到这一点。 @Eten Reisner – 2014-10-01 17:46:41
@AnmolYousaf查看['man fopen'](http://linux.die.net/man/3/fopen),那里有另外一个对你有用的功能。也可能是['man dup'](http://linux.die.net/man/3/dup)。 – 2014-10-01 17:49:56
谢谢@EtanReisner – 2014-10-01 17:53:57