C - 将IO定向到管道,然后将其恢复到控制台

时间:2015-11-29 21:13:36

标签: c linux terminal pipe

上下文:我正在构建一个UNIX shell,目前正在实现管道。

目标:通过管道分隔的调用将输出从一个传递到另一个,只打印最终输出。

症状:最后一个进程继续输出到管道中,因此我什么都看不到,并且不知道它是否正确执行,接收上一个进程的输出作为输入等。

诊断是否可以随意在管道和控制台之间切换输出:我只需创建管道,将其引导到管道然后再返回控制台,然后再继续执行前面的代码execvp()调用(即无论如何应该打印),看它是否在终端上。

我测试的代码:

def asset_path(source, options = {})
  source = source.to_s
  return "" unless source.present?
  return source if source =~ URI_REGEXP

  tail, source = source[/([\?#].+)$/], source.sub(/([\?#].+)$/, '')

  if extname = compute_asset_extname(source, options)
    source = "#{source}#{extname}"
  end

  if source[0] != ?/
    source = compute_asset_path(source, options)
  end

  relative_url_root = defined?(config.relative_url_root) && config.relative_url_root
  if relative_url_root
    source = File.join(relative_url_root, source) unless source.starts_with?("#{relative_url_root}/")
  end

  if host = compute_asset_host(source, options)
    source = File.join(host, source)
  end

  "#{source}#{tail}"
end

我根据this answer选择了这个序列,但它无法打印出这段代码之外的任何内容。不幸的是,我发现类似的问题通常归结为fflush()调用,或者不关心将输出恢复到终端(即我不是在没有做任何研究的情况下问的。)

非常感谢提前。

我正在测试#include "stdio.h" #include "stdlib.h" #include "string.h" #include "unistd.h" #include "errno.h" #include <sys/wait.h> #include <sys/stat.h> #include <sys/types.h> #include <signal.h> //all the #includes I've got in the original project int main(int argc, char* argv[]) { int fp[2]; pipe(fp); int saved_fd_0, saved_fd_1; saved_fd_0 = dup2(fp[0], 0); saved_fd_1 = dup2(fp[1], 1); dup2(saved_fd_1, 1); dup2(saved_fd_0, 0); close(fp[0]); close(fp[1]); printf("output is at terminal"); } 作为输入。

1 个答案:

答案 0 :(得分:-2)

U确实搜索好了,上面的代码几乎没有任何用处。 听起来像柯尔。项目,所以这里有一些提示

  1. 多个管道可以显示在cmdline上

  2. 管道是您工作所需的全部工具(图表可以提供帮助)