создание файла для перенаправления вывода оболочки

0

Это школьное задание.

Поэтому в основном я написал код C для оболочки, которая обрабатывает завершение команды с помощью &, и перенаправление ввода/вывода с помощью > или <. используя трубы и fork(), execvp().

Проблема в том, что мое перенаправление ввода/вывода обрабатывает только файлы, которые уже существуют.

Мне нужно знать, как мне перейти на перенаправление вывода на файл, который не существует - я знаю, что мне нужно будет создать файл, но я не уверен, как это работает.

Например: ls -a < test.txt

Если test.txt не находится в каталоге, мне нужно его создать и перенаправить на него. Итак, как мне создать этот файл?

вот некоторый базовый пример кода, который не создает новый файл:

        else if( '>' ==  buff[i] ){
           i++;
           j=0;

           if( ' ' == buff[i] ) 
              i++;

           while( ' ' != buff[i] && i < len )
              out_file[j++]=buff[i++];
           out_file[j]='\0';


           if ( ( ofd = open(out_file,1) ) < 0 ){
              perror("output redirected file");
              exit( 1 );
           }

           close(1);
           dup(ofd);
        }

Любая помощь в том, как я могу выводить и создавать новый файл, будет очень признательна! Благодарю!

Теги:
redirect

1 ответ

1
Лучший ответ

Вы должны сообщить open чтобы создать файл, если необходимо:

if ( ( ofd = open(out_file, O_WRONLY | O_CREAT) ) < 0 ) {

Обратите внимание, что ваш код будет более читабельным, если вы используете именованные константы для open флагов. Сравните с функционально эквивалентным

if ( ( ofd = open(out_file, 513) ) < 0 ) {

или даже

if ( ( ofd = open(out_file, 0x0201) ) < 0 ) {
  • 0
    Спасибо! Не осознавал, что это была такая маленькая переделка :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню