gpt4 book ai didi

linux - 当从我的 c 程序中调用时,如何将数据传递给使用 stdin/stdout 的 zlib 的 zpipe 可执行文件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:38 25 4
gpt4 key购买 nike

我有一个 c 程序应用程序,它能够生成一个包含压缩数据的文件,然后通过添加必要的 zlib 页眉和页脚将其转换为 zlib 格式。我想通过在我的应用程序中调用 zlib 的 zpipe 可执行文件来验证数据是否已正确压缩。

直接从linux命令行调用zpipe,语法如下: zpipe usage: zpipe [-d] < source > dest,其中'-d'表示解压。因此,使用 linux 命令行 shell,源文件的内容被定向到 stdin,膨胀的数据被定向到 stdout。

我的应用程序有自己的主要功能。最初,我能够将 zpipe 源代码构建到我的应用程序中,并将 zpipe 主函数中的必要代码合并到我应用程序的主函数中,从而直接调用 zpipe 的 inflate 和 deflate 函数。

我现在想要做的不是合并 zpipe 源代码本身,而是从我的应用程序的主函数中调用 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。我可以使用“管道”来实现吗?

最佳答案

我发现这个例子原则上可能构成了我正在尝试做的事情的基础。需要创建两个管道。 https://jineshkj.wordpress.com/2006/12/22/how-to-capture-stdin-stdout-and-stderr-of-child-program/

关于linux - 当从我的 c 程序中调用时,如何将数据传递给使用 stdin/stdout 的 zlib 的 zpipe 可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33824700/

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