gpt4 book ai didi

c - 在 ANSI C 中从 OpenSSL 接收输出的不同方式

转载 作者:太空宇宙 更新时间:2023-11-03 23:54:20 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

在您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, /*...*/);
}
/* ... */

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

关于c - 在 ANSI C 中从 OpenSSL 接收输出的不同方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11514898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com