作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在这个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但它不工作。
这段代码有什么问题?
并且,请告诉我是否有更好的方法? (不在终端使用 >
)
最佳答案
stdout
是标准输出流的 FILE *
指针。 dup2
需要文件描述符,而且您还弄乱了参数顺序。使用
dup2(file, 1);
相反。
关于这部分的更好方法。这种方式很糟糕,因为您可能希望在此 system
调用完成后恢复您的标准输出。您可以通过多种方式执行此操作。你可以在某处dup
它,然后dup2
它回来(并关闭dup
ped)。我个人不喜欢按照其他答案中的建议编写自己的 cat
实现。如果您唯一想要的是将带有 system
的单个 shell 命令重定向到文件系统中的文件,那么最直接和最简单的方法可能是构造 shell 命令来执行此操作
system("ls -l > Result");
但是如果文件名(结果)来自用户输入,你必须小心,因为用户可以提供类似 'Result; rm -rf/*'
作为文件名。
此外,关于安全主题,您应该考虑按照评论中的建议指定 ls
的完整路径:
system("/bin/ls -l > Result");
关于c - 如何将 system() 的输出重定向到文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11189490/
我是一名优秀的程序员,十分优秀!