【问题标题】:How to redirect back to stdout after using dup2(..) , and using execvp(...)使用 dup2(..) 和使用 execvp(...) 后如何重定向回标准输出
【发布时间】:2011-10-03 20:37:55
【问题描述】:

我正在使用 execvp() 运行多个命令。在我的一个 execs() 之前使用 dup2() 之后,它会按预期重定向到 dup2() 中的文件。但是,问题在于 dup2 之后的任何 execvp() 输出都会不断被重定向回文件。我的问题是:如何使用 dup2 将输出重定向回标准输出?

【问题讨论】:

  • 您确定在单独的fork-ed 进程中调用每个execvp 吗?如果不这样做,对execvp 的第一次调用将替换进程的图像,并且任何后续指令(包括对execve 的其他调用)都不会到达。
  • 是的,我在子进程中使用 exec 和 dup2。 if(pidid == 0){....}
  • 我想通了..我有一个全局变量布尔值,一旦执行完成,我就再也没有在子进程中改回来。愚蠢的错误
  • 不幸的是,发现一个 CS20 级别的编程错误似乎是一个 CS150 级别的问题并不总是很有趣。

标签: c exec stdout std


【解决方案1】:

你可以用 dup() 和 dup2() 保存标准输出。

我建议您在 fork() 之后(在子进程内部)而不是在它之前执行 dup2() 重定向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多