Я пытаюсь создать программу, которая запускает команды из пользовательского ввода.
В настоящее время она работает для команд из нескольких слов, но я пытаюсь реализовать перенаправления.
Я начал с получения ввода из файла, и это не так. работает, но я не получаю никаких ошибок (я тестирую с помощью команды "wc -l ‹ text.txt", файл text.txt находится в том же каталоге, что и программа.)
Вот код:
- input - это строка с пользовательским вводом
- перед тем, как перейти к этому методу, я уже проверил, что на нем есть перенаправление
redirect(int proc, char * input){
char * comm;
if(proc == 1){ //in
comm = strsep(&input, "<");
}
else{ //out
comm = strsep(&input, ">");
}
int proc2 = check(input);
if(proc2 == 0){ //only one redirection
if(proc == 1){ //in
input = trim(input);
int fd = open(input, O_RDWR);
close(0);
dup2(fd, 0);
close(fd);
comm = trim(comm);
char ** words = parse(comm);
char str[105];
strcpy(str, "/bin/");
strcat(str, words[0]);
shrink(str);
if(!execvp(str, words)){ /*exec failed */
exit(1);
}
}
else{ //out
}
}
else{ //more than one redirection/pipe
}
}
изменить
Мне нужно использовать команду execvp для запуска пользовательского ввода.
Пользовательская команда "‹" должна изменить стандартный ввод, чтобы он был файлом после него.
Я изменил stdin должен быть text.txt, но я не знаю, как передать его в качестве аргумента, чтобы execvp мог его запустить.