Я пытаюсь построить оболочку на языке C для проекта ОС. Проблема возникает, когда я делаю часть перенаправления. ls
работает хорошо, но если сделаю ls > somefile
. Это дает мне ошибку «ls: невозможно получить доступ»: нет такого файла или каталога ». Вот та часть моего кодаexecvp, redirecion вывода 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 –
@AnmolYousaf См. ['Man fopen'] (http://linux.die.net/man/3/fopen), там есть еще одна функция, которая вам будет полезна. Также возможно ['man dup'] (http://linux.die.net/man/3/dup). –
Спасибо @EtanReisner –