Я пытаюсь создать программу, которая запускает команды с пользовательского ввода.
На данный момент он работает для нескольких команд слов, но я пытаюсь реализовать перенаправления.
Я начал с ввода ввода из файла, и он не работает, но я не получаю никакой ошибки (я тестирую с помощью команды wc -l < text.txt, файл text.txt - это тот же каталог . как программа)
Вот код:
- вход НТР с входом пользователя
- до прихода к этому методу я уже проверил, что он имеет перенаправление на немПопытка прочитать из файла
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 для запуска пользователя i Nput.
Пользовательская команда «<» должна изменить stdin как файл после него.
Я изменил stdin как text.txt, но я не знаю, как передать его как arg, поэтому execvp может его запустить.
Это проект, который я делаю. Я не могу использовать файл bat. Мне нужно изменить stdin как файл. – Mark