我必须使用示例代码,其中必须提供文件源名称和目标文件名称。然后,这些名称将被发送到另一个函数,如下面的代码所示

    int def(FILE *source, FILE *dest, int level)
    {
        ----
        -----

        return Z_OK;
    }



    int main(int argc, char **argv)
    {
        int ret;

        /* avoid end-of-line conversions */
        SET_BINARY_MODE(stdin);
        SET_BINARY_MODE(stdout);

        // do compression if no arguments
        if (argc == 1)
        {
            ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION);
            if (ret != Z_OK)
            {
                zerr(ret);
                return ret;
            }
              // otherwise, report usage
            else
            {
                fputs("zpipe usage: zpipe [-d] < source > dest\n", stderr);
                return 1;
            }
        }

        return 0;
    }


我不了解,stdin和stdout如何传递输入和输出文件名。此外,我无法提供正确的源文件名和目标文件名顺序作为命令参数。大多数时候,我得到zpipe usage: zpipe [-d] < source > dest

更新:完整的示例代码位于this link

最佳答案

使用stdinstdout时,不传递文件名。调用main时,这些文件已经打开,程序可以读取/写入它们。然后,父进程(通常是外壳程序)负责将数据馈送到stdin并使用程序中stdout的数据进行处理。

在您的示例用法zpipe < sourcefile > destinationfile中,外壳程序打开源文件进行读取,将打开的文件提供给zpipe,还创建目标文件进行写入,然后将程序输出到其stdout的内容写入其中。 zpipe程序不会获取任何文件的名称,而只会获取打开的文件句柄。

同样,< sourcefile> destinationfile也不是zpipe的参数。 Shell如上所述解析和处理它们,zpipe不会将它们用作参数。

09-13 08:26