加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

如何将system()的输出重定向到文件?

发布时间:2020-05-23 14:18:20 所属栏目:Linux 来源:互联网
导读:在这个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); r

在这个C程序中

#include 

我正在尝试将system()的输出重定向到一个文件,因为我已经使用了dup2,但它无法正常工作.

这段代码出了什么问题?
如果有更好的方法可以告诉我吗? (不在终端使用>) 最佳答案 stdout是标准输出流的FILE *指针. dup2需要文件描述符,你也搞砸了参数顺序.
使用

dup2(file,1);

代替.

在更好的方式做这部分.这种方式很糟糕,因为您可能希望在此系统调用完成后恢复标准输出.您可以通过多种方式执行此操作.您可以在某处复制它,然后将其复制(并关闭重复的).我个人不喜欢像其他答案中所建议的那样编写自己的猫实现.如果您唯一想要的是将带有system的单个shell命令重定向到文件系统中的文件,那么可能最直接和最简单的方法是构造shell命令来执行此操作

system("ls -l > Result");

但是如果文件名(结果)来自用户输入,你必须要小心,因为用户可以提供类似’结果; rm -rf / *’作为文件名.

此外,关于安全性主题,您应该考虑在注释中指定ls的完整路径:

system("/bin/ls -l > Result");

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读