Я создаю простую оболочку на C, и одной из функций является перенаправление ввода-вывода. Тем не мение; Мне трудно понять, как вернуться в stdin / stdout после завершения выполнения команды перенаправления.
Я попытался скопировать stdin / out и затем снова использовать его в основной функции, как показано в коде, но это не сработало.
void execute(char **args, bool flag)
{
pid_t pid;
int status;
int exc;
if ((pid = fork()) < 0) {
printf("forking child process failed\n");
}
else if (pid == 0) { /* for the child process: */
if(in_flag){
file_desc_in = open(sub2, O_RDONLY | O_CREAT);
chmod(sub2 , S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH);
stdinCopy = dup(STDIN_FILENO);
dup2(file_desc_in, 0);
close(file_desc_in);
in = true;
}
else if(out_flag){
file_desc_out = open(sub2,O_WRONLY |O_APPEND | O_CREAT);
chmod(sub2 , S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH);
stdoutCopy = dup(STDOUT_FILENO);
dup2(file_desc_out, STDOUT_FILENO);
close(file_desc_out);
out = true;
}
exc = execvp(args[0], args); /* execute the command */
printf("exec failed!\n")
exit(EXIT_FAILURE)
}
if(flag){
pid_t childpid = wait(&status);
}
}
эта часть в main ()
if(out){
dup2(stdoutCopy,STDOUT_FILENO);
close(stdoutCopy);
out = false;
}
else if(in){
dup2(stdinCopy,STDIN_FILENO);
close(stdinCopy);
in = false;
}
Например, когда я перенаправляю вывод команды ls в какой-то файл output.txt, перенаправление работает и вывод отображается в файле, но затем все выходные данные отправляются в один и тот же файл для всех вновь введенных команд, а не отображаются на терминал.
как мне решить эту проблему?