In this C
program
#include <stdio.h>
#include <stdlib.h>
#include <unistd.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
is a FILE *
标准输出流的指针。dup2
需要文件描述符,而且您还弄乱了参数顺序。
使用
dup2(file, 1);
instead.
关于这部分的更好方法。这种方式很糟糕,因为您可能想在此之后恢复标准输出system
通话完成。您可以通过多种方式做到这一点。你可以dup
它在某个地方然后dup2
它返回(并关闭dup
佩一)。我个人不太喜欢自己写cat
其他答案中建议的实现。如果您唯一想要的就是使用以下命令重定向单个 shell 命令system
到文件系统中的文件,那么最直接、最简单的方法可能是构造 shell 命令来执行此操作,如下所示
system("ls -l > Result");
但是如果文件名(结果)来自用户输入,则必须小心,因为用户可以提供类似的内容'Result; rm -rf /*'
作为文件名。
另外,关于安全性主题,您应该考虑指定完整路径ls
正如评论中所建议的:
system("/bin/ls -l > Result");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)