Как прочитать stdin родителя в дочернем процессе - PullRequest
0 голосов
/ 06 февраля 2020

Здесь у меня есть программа, которая отлично работает. Этот код запускает 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. Как вы думаете, возможно ли это, и если да, то как бы вы это сделали?

Спасибо;)

...