C: dup2 () перед execv

Для задания домашней работы я должен написать базовую оболочку, включая redirect. Программа использует readline для запроса ввода, анализирует входную строку и разбивает ее на имя исполняемого файла, аргументы и файлы ввода / вывода, если это применимо. После parsingа строки, это forks и child execv () для исполняемого файла, который был передан. Я использую dup2 (), чтобы изменить дескрипторы файла после fork и перед execv, но у меня возникла проблема после того, программа имеет execv’d для нового исполняемого файла. Если в моей оболочке я запустил 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.outfile=strsep(&_str_cmd," "); i--; continue; } } else{break;} } args[i]=(char*)0; _cmd.binary=args[0]; memcpy(_cmd.argv,args,sizeof _cmd.argv); 

    Как вы c->argv ? Это должен быть NULL перечеркнутый массив char * . Вероятно, вам не хватает терминатора.


    В вашей обработке кода <... и >... вы пропустите запись в argv , оставив ее неинициализированной.