使用Stdin和Stdout

时间:2016-10-19 11:00:33

标签: c visual-studio-2010 stdout stdin

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

    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

1 个答案:

答案 0 :(得分:0)

使用stdinstdout时,不会传递文件名。调用main时这些文件已经打开,程序只能读/写它们。然后,父进程(通常是shell)负责将数据提供给stdin并使用来自程序stdout的数据执行某些操作。

在您的示例用法zpipe < sourcefile > destinationfile中,shell打开 sourcefile 进行读取,并将打开的文件提供给 zpipe ,并创建 destinationfile < / em>用于写入,并在程序输出到stdout时向其写入。 zpipe 程序没有得到任何一个文件的名称,它只是获取打开的文件句柄。

此外,< sourcefile> destinationfile不是 zpipe 的参数。 Shell如上所述解析并处理它们, zpipe 不会将它们作为参数。