Перенаправление ввода / вывода оболочки

#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 во время работы вашей программы и проанализировать все токены в строке.