Я реализую оболочку на C с перенаправлением ввода и вывода.Я могу успешно выполнить перенаправление ввода, но перенаправление вывода не будет работать.Например, если я сделаю ls > out.txt
, out.txt будет содержать текст "out.txt", а не результаты команды ls
.
Я посмотрел другие ответы о переполнении стека и открытые () и creat () документация, но не удалось решить проблему.
Это код, который у меня есть в настоящее время, если обнаружено перенаправление вывода (>):
if(outRedirect == 1)
{
//I have tried using open() and creat()
//int out = open(args[1], O_WRONLY|O_CREAT|O_TRUNC, 0640);
int out = creat(args[1], 0640);
dup2(out, STDOUT_FILENO);
close(out);
//reset flag to 0
outRedirect = 0;
//execute command
execvp(args[0], args);
}
Iхотите, чтобы файл out.txt содержал:
a.out
in.txt
makefile
out.txt
README
simple-shell
simple-shell.c
, но он содержит
out.txt