这是一项家庭作业,所以我不会分享我的代码。我只允许进行“铅笔下降”讨论。我认为这就是他所说的,所以基本上只是一个讨论。我不是在寻找代码专家。
在我的程序中,我多次fork并使用dgst execlp openssl,它返回一个MD5哈希(?)。我正在使用此字符串来比较多个文件,看它们是否相同。
目前,我发现从中获取输出的唯一方法是使用-out并将其保存到文件中,但一遍又一遍地执行此操作不会附加文件,它只是重写文件所以这样做是一个缓慢而痛苦的过程。
我问是否有一种方法可以通过exec或openssl将这个输出字符串写入父指针然后可以从那里访问和操作的指针,这样我就不会写入文件并通过父文件读取,一次一个过程。
答案 0 :(得分: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, /*...*/);
}
/* ... */
这只是您需要使用的调用的模型。您的代码必须处理从多个管道读取。