我使用管道生成子进程,该进程从文件中读取一部分并通过管道发送,以便父进程可以读取它,并执行extern程序并将stdout重定向到文件。 / p>
问题是执行execv的程序的stdout没有保存在我的temporalFile中。
1-我错了使用execv ??(我在系统功能之前使用过,但教授说它不是性能不好)
2-可以从execv处理stdout吗?
3 - 是否有另一种方法可以执行extern程序将参数传递给extern程序并捕获它的stdout?
早上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;
}