【发布时间】:2012-06-26 17:13:27
【问题描述】:
在这个C 程序中
#include <stdio.h>
#include <fcntl.h>
int main()
{
int file = open("Result", O_CREAT|O_WRONLY, S_IRWXU);
dup2(stdout, file);
system("ls -l");
return 0;
}
我正在尝试将system() 的输出重定向到一个文件,因为我使用了dup2,但它不起作用。
这段代码有什么问题?
并且,请告诉我是否有更好的方法来做到这一点? (在终端不使用>)
【问题讨论】:
-
为什么不在
system命令中使用>重定向? -
使用
system("ls -l > Result");或制作您自己的fork()/exec*()组合。 -
不要使用
system。总是错的。在没有 shell 的情况下自己运行子进程,使用fork和execvp或posix_spawn。 -
@R.. 这里,“它总是错的”意味着 system() 总是错的或者使用 system() 是错的。请澄清。
-
我的意思是
system应该被视为已弃用,因为 (1) 很难对它做任何有用的事情,并且 (2) 试图用它做任何有用的事情(例如传递参数)几乎肯定会产生危险(可能对安全至关重要)与 shell 转义相关的错误。