Здесь у меня есть программа, которая отлично работает. Этот код запускает bash в родительский процесс, а дочерний процесс сохраняет стандартный вывод из родительского процесса в файл с именем «toto». Таким образом, в файле «toto» есть все выходные команды, которые были запущены в bash из родительского процесса.
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv){
int fd1[2];
int pid;
if(pipe(fd1) == -1){
perror("pipe failed\n");
return 1;
}
if((pid = fork()) == -1){
perror("fork failed\n");
return 2;
}
else if(pid == 0){
close(fd1[1]);
dup2(fd1[0], 0);
close(fd1[0]);
argv[0] = "-a";
argv[1] = "toto";
argv[2] = NULL;
execve("/usr/bin/tee", argv,NULL);
return 3;
}
else{
close(fd1[0]);
dup2(fd1[1],1);
close(fd1[1]);
execve("/bin/bash",NULL,NULL);
return 4;
}
return 0;
}
Я также хотел бы сохранить в файле «toto» имя команды впадающих в bash. Как вы думаете, возможно ли это, и если да, то как бы вы это сделали?
Спасибо;)