Chinaunix首页 | 论坛 | 博客

分类: C/C++

2015-01-20 21:59:12

这段重定向的代码有什么问题:

    /* redirect the stdout */
1.    const char *tempfile = "temp";
2.    fd_t fd = open (tempfile, O_CREAT | O_RDWR | O_TRUNC, 0777);
3.    fd_t back = dup (STDOUT_FILENO);
4.    dup2 (fd, STDOUT_FILENO);
5.    printf...
6.    printf ("\n");
7.    dup2 (back, STDOUT_FILENO);
8.    close (fd);
9.    close (back);

1.  在第7行之前需要增加fflush(stdout). 因为你重定向标准输出到一个文件,文件默认的缓冲方式是全缓冲。在你
     将stdout设置回来之前,需要将数据冲洗到文件当中。
2.  如果这个块会被多次调用呢? 需要在第4行之前再一次冲洗缓冲区。

在重定向某个文件之前,一定要将与它关联的FILE对象进行冲洗。



阅读(2537) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~