【问题标题】:Use of Stdin and Stdout标准输入和标准输出的使用
【发布时间】:2016-10-19 11:00:32
【问题描述】:

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

    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;
    }

我不知道 stdinstdout 是如何传递输入和输出文件名的。此外,我无法提供正确的源文件名和目标文件名序列作为命令参数。大多数时候我会收到zpipe usage: zpipe [-d] &lt; source &gt; dest

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

【问题讨论】:

    标签: c visual-studio-2010 stdout stdin


    【解决方案1】:

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

    在您的示例用法zpipe &lt; sourcefile &gt; destinationfile 中,shell 打开 sourcefile 进行读取,并将打开的文件提供给 zpipe,并创建 destinationfile 用于写入,并将程序输出到其stdout 的任何内容写入它。 zpipe 程序不获取任何一个文件的名称,它只获取打开的文件句柄。

    另外,&lt; sourcefile&gt; destinationfile 不是 zpipe 的参数。 Shell 如上所述解析和处理它们,zpipe 不会将它们作为参数获取。

    【讨论】:

    • 谢谢,但是哪些文件是打开的?我如何告诉它,我想传递哪个文件以及我想在哪里获得输出?
    • &gt; 用于重定向stdout,即。程序的标准输出输出到你放在它后面的任何文件。而&lt; 用于重定向stdin,无论程序读取什么都来自它之后的文件。 (有点额外:还有管道|,用于两个进程之间,它的作用类似于左侧程序的&gt;,以及右侧的程序&lt;。)。从程序中,您无法(轻松地)判断输出的位置或输入的位置,您只需读取/写入即可。
    • 有什么方法可以提供我自己的源文件并将结果存储到destinationo 文件中?我的意思是,我应该进行哪些修改才能使用我的源文件?
    • 如果我使用FILE *pSRC = fopen("srcFile.pdf")FILE *pDST = fopen("dstFile.pdf") ret = def(pSRC , pDST , Z_DEFAULT_COMPRESSION)....它不起作用
    • 给shell命令zpipe &lt; srcFile.pdf &gt; dstFile.pdf有效吗? “它不起作用”也不是很有用的问题描述......
    猜你喜欢
    • 2021-10-20
    • 2013-09-18
    • 2017-05-16
    • 2013-06-13
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 2010-12-01
    相关资源
    最近更新 更多