【发布时间】:2011-06-16 00:35:24
【问题描述】:
我有一个程序通过system() 执行各种shell 命令,偶尔会打印到cout。我想将来自system() 调用的所有输出重定向到日志文件,这样它们就不会弄乱正常输出。我可以在不必将> log 附加到我的所有系统命令的情况下执行此操作吗?
【问题讨论】:
标签: c++ c unix redirect system
我有一个程序通过system() 执行各种shell 命令,偶尔会打印到cout。我想将来自system() 调用的所有输出重定向到日志文件,这样它们就不会弄乱正常输出。我可以在不必将> log 附加到我的所有系统命令的情况下执行此操作吗?
【问题讨论】:
标签: c++ c unix redirect system
看来你可以使用popen
【讨论】:
popen的平台有效。仅供参考,标准 C 和 C++ 规范不需要平台支持 popen。
关闭 stdio 文件描述符(0、1 和 2)并在您喜欢的任何输出设备上重新打开它们。
【讨论】:
使用system 只是一个坏主意,期间。如果您使用fork 和execve 或posix_spawn,您可以轻松地进行必要的重定向并避免shell 引用问题导致的各种漏洞。
【讨论】:
如果您可以使用包装流程调用的库。从posix编码很难。我使用boost.process,效果很好。您可以简单地告诉库您希望如何重定向输出...
my2c
【讨论】: