- 论坛徽章:
- 11
|
本帖最后由 zylthinking 于 2013-02-07 16:40 编辑
folklore 发表于 2013-02-07 15:53
@zylthinking
his code:the right one is: - fclose(stdout);
- open("test.txt", O_CREAT|O_RDWR, 0600);
- freopen(stdout);
- dup2(fileno(stdout),STDOUT_FILENO);
- system("ls");
复制代码 这代码也不见得正确
我看不出 open 和 freopen 有什么关系来, 更看不出 system 和 重定向有什么关系;以及 dup 在这里有什么用;
这段代码其实说白了2句就行
freopen("test.txt", "w", stdout);
system("ls");
就足以重定向了,剩下几句, 要么画蛇添足, 要么根本毫无必要。
但这样也是达不到让 ls 输出到 txt 的目的的,
就算 system 是通过本进程 fork 而来, 从而继承了描述字, 在 execl ls 时也会关闭并重新打开 /dev/stdout 和之前的重定向没有任何关系; 更何况, ls 也未必一定使用 printf 系列进行输出, 它直接打开 /dev/stdout 设备来写, 神也阻止不了它
日了, 一不小心就胡说八道了, stdin, out, err 本就不是操作系统概念, execl 更不会主动打开这几个fd, 这是 c run time 做的。 |
|