我有一个 c 程序应用程序,它能够生成一个包含压缩数据的文件,然后通过添加必要的 zlib 页眉和页脚将其转换为 zlib 格式。我想通过从我的应用程序中调用 zlib 的 zpipe 可执行文件来验证数据是否已正确压缩。
要直接从 linux 命令行调用 zpipe,语法如下: zpipe 用法:zpipe [-d] < source > dest,其中 '-d' 表示解压缩。因此,使用 linux 命令行 shell 将源文件的内容定向到标准输入,并将膨胀的数据定向到标准输出。
我的应用程序有自己的主要功能。最初,我能够将 zpipe 源代码构建到我的应用程序中,并将 zpipe 的 main 函数中的必要代码合并到我的应用程序的 main 函数中,从而直接调用 zpipe 的 inflate 和 deflate 函数。
我现在想做的不是合并 zpipe 源代码本身,而是从我的应用程序的 main 函数中调用 zpipe 可执行文件本身。
我从 linux 命令行调用我自己的应用程序的主要功能,如下所示: ./myapp ./zpipe -d -i zlib_format_input_compressed_file -o output_decompressed_file
我可以通过构造一个 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;
}
}
问题是,我如何从我的 c 程序中将“zlib_format_input_compressed_file”的内容提供给 zpipe 的标准输入,就像在命令行 shell 中所做的那样,并告诉 zpipe 将结果定向到 output_decompressed_file。我可以使用“管道”来实现这一点吗?