gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:40:43 24 4
gpt4 key购买 nike

在这个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它回来(并关闭dupped)。我个人不喜欢按照其他答案中的建议编写自己的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com