最佳答案
stdout是标准输出流的FILE *指针. dup2需要文件描述符,你也搞砸了参数顺序.
使用
原文链接:https://www.f2er.com/linux/440063.html使用
dup2(file,1);
代替.
在更好的方式做这部分.这种方式很糟糕,因为您可能希望在此系统调用完成后恢复标准输出.您可以通过多种方式执行此操作.您可以在某处复制它,然后将其复制(并关闭重复的).我个人不喜欢像其他答案中所建议的那样编写自己的猫实现.如果您唯一想要的是将带有system的单个shell命令重定向到文件系统中的文件,那么可能最直接和最简单的方法是构造shell命令来执行此操作
system("ls -l > Result");
但是如果文件名(结果)来自用户输入,你必须要小心,因为用户可以提供类似’结果; rm -rf / *’作为文件名.
此外,关于安全性主题,您应该考虑在注释中指定ls的完整路径:
system("/bin/ls -l > Result");