私は圧縮データを含むファイルを生成できる C プログラム アプリケーションを持っています。このファイルは必要な zlib ヘッダーとフッターを追加することで zlib 形式に変換されます。アプリケーション内から zlib の zpipe 実行可能ファイルを呼び出して、データが正しく圧縮されていることを確認したいと考えています。
Linux コマンド ラインから直接 zpipe を呼び出す場合の構文は次のとおりです。したがって、Linux コマンド ライン シェルを使用して、ソース ファイルの内容は stdin に送られ、膨張したデータは stdout に送られます。
私のアプリケーションには独自の主な機能があります。最初に、zpipe ソース コードをアプリケーションにビルドし、必要なコードを zpipe のメイン関数からアプリケーションのメイン関数に組み込むことで、zpipe の inflate および deflate 関数を直接呼び出すことができました。
zpipe ソース コード自体を組み込むのではなく、アプリケーションのメイン関数内から zpipe 実行可能ファイル自体を呼び出したいと考えています。
次のように、Linux コマンド ラインから自分のアプリケーションのメイン関数を呼び出します。
newargv を作成することにより、アプリケーション内から zpipe 実行可能ファイルを呼び出すことができますが、実際に zpipe に与えたファイル データを解凍させるまで、この操作は失敗します。
char *newargv[] = {argv[1], argv[2]}; // for zpipe, argc = 2
if (0 == (my_pid = fork())) {
if (-1 == execve(argv[1], newargv, NULL)) {
perror("child process execve failed [%m]");
return -1;
}
}
問題は、'zlib_format_input_compressed_file' の内容を C プログラム内から zpipe の stdin に送り、コマンド ライン シェルから行ったのと同じように、zpipe に結果を output_decompressed_file に送るように指示する方法です。これを達成するために「パイプ」を使用できますか?