Можно ли захватить стандартный вывод из execv в файл?

Я использую каналы для генерации дочернего процесса, который читает часть из файла и отправляет ее через канал, чтобы родительский процесс мог прочитать ее, выполнить программу extern и перенаправить стандартный вывод в файл.

Проблема в том, что стандартный вывод программы, которая выполняет execv, не сохраняется в моем временном файле.

1- Я ошибаюсь, используя execv??(это я использовал до системной функции, но профессор сказал, что это не было плохо, производительность)

2 - можно обработать стандартный вывод из execv?

3-есть ли другая альтернатива для выполнения внешней программы, передавая параметры внешней программе и перехватывая ее стандартный вывод?

4-я что-то упустил в своем коде?

5 - если я делаю печать, stdout захватывается temporalFile.

pd: извините, мой английский очень плохой.

int main()
{

int     fd[2];
pid_t   childpid;
char    readbuffer[80];

pipe(fd);

if((childpid = fork()) == -1){
        perror("error at fork");
        exit(1);
}

if(childpid == 0){
/* Child process closes up input side of pipe */
    close(fd[0]);

    FILE* archEntry=fopen("datosDeEntrada.txt","r");

    char string[3];

    fseek(archEntry,4,SEEK_SET);

    fread(string,3,1,archEntry);
    /* Send "string" through the output side of pipe */

    write(fd[1], string, (strlen(string)+1));

    exit(0);
}

else{
    /* Parent process closes up output side of pipe */

    close(fd[1]);

    FILE* fdArch=fopen("temporalFile.txt","w");

    dup2(fileno(fdArch),STDOUT_FILENO);

    /* Read in a string from the pipe */

    read(fd[0], readbuffer, sizeof(readbuffer));


    char *argv[]={ "workspace/project/Debug/./externProgram ", readbuffer, NULL};

    execv(argv[0],argv);


    fclose(fdArch);

}

return 0;

}

0 ответов

Другие вопросы по тегам