【问题标题】:Piping for a computer understanding计算机理解的管道
【发布时间】:2013-04-24 01:56:40
【问题描述】:

我理解在管道中 a c 的意思是使用文件b的数据作为输入来编程a而不是stdin,并将程序b的输出写入文件c而不是标准输出。

我不明白的是如何给出管道命令以使用文件 b 的数据作为输入来编程 a 而不是 stdin 并将程序 a 的输出写入文件 c 而不是 stdout。

b 应该放在哪里?

我有一个

非常感谢!

【问题讨论】:

  • 管道将一个进程的标准输出附加到另一个进程的标准输入,使用|。你所拥有的是重定向。而且它与 C 本身无关,它是周围环境的一个特征。
  • 那么我上面写的其实就是我要找的吗?

标签: c architecture system piping


【解决方案1】:

你应该这样做:

a < b > c

正如您在问题中提到的那样。这并没有按照您的意思做:它不使用 b 作为 a 的输入,也不使用 c 作为 b 的输出。这使用 b 作为 a 的输入,使用 c 作为 a 的输出。

【讨论】:

    【解决方案2】:

    这实际上不是管道,而是输入和输出流的重定向。

    管道是获取一个进程的标准输出并将其附加到另一个进程的标准输入,例如:

    seq 1 5 | sort -r
    

    生成数字 1 到 5(按此顺序),然​​后按相反顺序对它们进行排序,如下所示:

    pax> seq 1 5
    1
    2
    3
    4
    5
    
    pax> seq 1 5 | sort -r
    5
    4
    3
    2
    1
    

    顺序:

    prog <infile >outfile
    

    在进程中运行prog 程序并从infile 文件 获取其标准输入并将其标准输出发送到outfile 文件。只涉及一个过程。

    要“使用文件 b 的数据作为程序 a 的输入而不是标准输入,并将程序 a 的输出写入文件 c 而不是标准输出”,您可以使用:

    a <b >c
    

    和你一样。您会注意到,在我的示例中,重定向字符(&lt;&gt;)和文件名之间没有空格 - 我相信这会使关系更加清晰,因为 &gt;xyzzy 表示“将输出发送到 @ 987654331@文件”。

    您关于a &lt; b &gt; c 所做的错误断言(“使用文件 b 的数据作为输入来编程 a 而不是标准输入,并将程序 b 的输出写入文件 c 而不是标准输出”)会更贴切单独的命令:

    a <b ; b >c
    

    ab 程序之间没有真正的联系。

    【讨论】:

      【解决方案3】:

      你的理解是错误的。

      一个命令比如

      a <b >c
      

      只有一个命令,即aa 的输入来自文件b,输出来自文件c

      没有正在执行的命令b(或c)。

      简而言之,该命令已经完成了您想要的操作。

      【讨论】:

      • 真的吗?我认为将 b > c 并排放置会将 b 写入文件 c 而不是 stdout
      • @user2127663 是的,但如果这是完整的命令行。重定向操作不是链接程序。
      猜你喜欢
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 2019-11-24
      • 2021-09-18
      • 2019-02-16
      相关资源
      最近更新 更多