2

这是一个家庭作业,所以我不会分享我的代码。我只被允许进行“笔下”讨论。我想这就是他所说的,所以基本上只是一个讨论。我不是在寻找代码专家。

在我的程序中,我多次 fork 并使用 dgst 执行 execlp openssl,它返回一个 MD5 哈希(?)。我正在使用此字符串来比较多个文件以查看它们是否相同。

目前,我发现从中获取输出的唯一方法是使用 -out 并将其保存到文件中,但是一遍又一遍地执行此操作不会附加文件,它只是重写文件,所以这样做有点一个缓慢而痛苦的过程。

我在问是否有办法通过 exec 或 openssl 将这个输出字符串写入一个指针,然后父级可以从那里访问和操作,所以我不会写入文件并通过父级读取它,一个进程一次。

4

1 回答 1

1

在您之前fork,您可以使用pipe创建一对单向文件描述符(一个用于读取,一个用于写入)。之后fork,您可以使用dup2将该子进程的管道写入端设置为输出文件描述符,然后exec。然后,当父进程从管道的读取端读取时,它将读取子进程正在写入其stdout.

由于您正在比较多个子进程的输出,因此每个子进程都应该有自己的管道。

int fd[2];
pipe(fd);
pid_t pid = fork();
if (pid == 0) {
    close(fd[0]);
    dup2(fd[1], 1);
    execlp(/*...*/);
} else if (pid > 0) {
    close(fd[1]);
    while (read(fd[0], /*...*/) > 0) {
        /* ... */
    }
    wait4(&pid, /*...*/);
}
/* ... */

这只是您需要使用的调用的模型。您的代码将不得不处理从多个管道读取。

于 2012-07-17T02:18:52.400 回答