#c #shell #io #arguments #io-redirection
#c #оболочка #io #аргументы #io-перенаправление
Вопрос:
Я застрял в этом методе, где он сканирует argv на предмет любого использования < или >, которые указывают на перенаправление ввода или вывода //command [аргументы] [< infile] [> oufile]
Я реализую метод перенаправления, который открывает файл для чтения / записи из него. любая помощь была бы высоко оценена.
void do_redirect(char **argv)
{
int i;
for(i=0; argv[i]; i )
{
if (!strcmp(argv[i],"<")) {
int fp1 = open(argv[i 1] , O_WRONLY|O_CREAT, 0);
dup2(fp1, STDIN_FILENO);
argv[i]=NULL;
close(fp1);
}
else if (!strcmp(argv[i],">")) {
int fp2 = open(argv[i 1] , O_WRONLY|O_CREAT, 0);
dup2(fp2, STDOUT_FILENO);
argv[i]=NULL;
close(fp2);
}
}
}
Комментарии:
1. Не могли бы вы подробнее рассказать о том, как это реализовать? Я как бы застрял, если вы можете указать, что не так и нуждается в исправлении.
2. Если вы не программируете оболочку, она вам не нужна. Если вы и спрашиваете, как реализовать перенаправление ввода-вывода, то это слишком широкий вопрос для этого веб-сайта
3. да, я делаю крошечную лабораторию оболочки и должен реализовать перенаправление ввода-вывода
4. обратитесь к исходным кодам других оболочек
5. Вы, вероятно, никогда не получите
<
or>
в своей командной строке, потому что оболочка уже обрабатывает их и не предоставляет их вашей программе. Вам нужно прочитать полную командную строку из stdin или любого потока на вашем won во время работы вашей программы и проанализировать все токены в строке.