【问题标题】:Can I globally redirect the output of system() calls?我可以全局重定向 system() 调用的输出吗?
【发布时间】:2011-06-16 00:35:24
【问题描述】:

我有一个程序通过system() 执行各种shell 命令,偶尔会打印到cout。我想将来自system() 调用的所有输出重定向到日志文件,这样它们就不会弄乱正常输出。我可以在不必将> log 附加到我的所有系统命令的情况下执行此操作吗?

【问题讨论】:

    标签: c++ c unix redirect system


    【解决方案1】:

    看来你可以使用popen

    【讨论】:

    • 是的,使用 popen 进行阅读会给你一个管道,你可以从中读取命令 stdout 并按照你的意愿使用它。
    • 这仅对支持popen的平台有效。仅供参考,标准 C 和 C++ 规范不需要平台支持 popen
    【解决方案2】:

    关闭 stdio 文件描述符(0、1 和 2)并在您喜欢的任何输出设备上重新打开它们。

    【讨论】:

      【解决方案3】:

      使用system 只是一个坏主意,期间。如果您使用forkexecveposix_spawn,您可以轻松地进行必要的重定向并避免shell 引用问题导致的各种漏洞。

      【讨论】:

        【解决方案4】:

        如果您可以使用包装流程调用的库。从posix编码很难。我使用boost.process,效果很好。您可以简单地告诉库您希望如何重定向输出...

        my2c

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-04-04
          • 2016-01-15
          • 1970-01-01
          • 2012-06-29
          • 1970-01-01
          • 1970-01-01
          • 2018-10-15
          • 1970-01-01
          相关资源
          最近更新 更多