Это школьное задание.
Поэтому в основном я написал код 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);
}
Любая помощь в том, как я могу выводить и создавать новый файл, будет очень признательна! Благодарю!
Вы должны сообщить 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 ) {