2

これは宿題のためなので、コードは共有しません。私は「下書き」の議論しか許されていません。彼はそう呼んだと思うので、基本的にはただの議論です。私はコードの専門家を探しているわけではありません。

私のプログラムでは、複数回 fork し、MD5 ハッシュ (?) を返す dgst を使用して execlp openssl を実行しています。この文字列を使用して複数のファイルを比較し、それらが同一かどうかを確認しています。

現在、これから出力を取得するために私が見つけた唯一の方法は、-out を使用してファイルに保存することですが、これを何度も繰り返してもファイルは追加されず、ファイルが書き換えられるだけなので、これを行うとゆっくりとした痛みを伴うプロセス。

親がそこからアクセスして操作できるポインターにこの出力文字列を書き込むことができるexecまたはopensslを介した方法があるかどうかを尋ねているので、ファイルに書き込んで親を介して読み取るのではなく、1つのプロセス一度に。

4

1 に答える 1

1

の前にfork、 を使用pipeして一方向のファイル記述子のペア (読み取り用と書き込み用) を作成できます。その後、その子プロセスのパイプの書き込み終了を出力ファイル記述子に設定するためにfork使用できます。次に、親がパイプの読み取り側から読み取ると、子プロセスがその に書き込んでいるものを読み取ります。dup2execstdout

複数の子プロセスからの出力を比較しているため、各子には独自のパイプが必要です。

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 に答える