是否有可能将exedv中的stdout捕获到文件中?

时间:2015-05-17 22:25:03

标签: c pipe stdout execv

我使用管道生成子进程,该进程从文件中读取一部分并通过管道发送,以便父进程可以读取它,并执行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;

}

0 个答案:

没有答案