Можно ли захватить стандартный вывод из 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;
}