- 论坛徽章:
- 0
|
关于dup2()的疑问.
原帖由 "converse" 发表:
fflush(stdout);//刷新stdout上的缓冲区,这样前面的hello写入文件 install.log中
dup2(id, STDOUT_FILENO);
printf("world\n"
fclose(fp);
原帖由 "converse" 发表:
不过这里对fflush(stdout)的运用还有一点疑问,fflush(stream)刷新的是流 stream上的缓冲,是不是可以理解为不论文件描述符STDOUT_FILENO定位到了哪个文件,stdout都保存有未写入文件的缓冲区的内容呢?按理来说,文件描述符比流更加底层才对呀
呵呵, 确实如此。 事实上,文件指针,比如说fp, 是根据fileno(fp)来对应文件的。你看上面的代码,STDOUT_FILENO 已经对应到 install.log,所以,当fflush(stdout)后, 缓冲内容写入文件 install.log。如果不fflush,执行
dup2 (id, STDOUT_FILENO), 这时 STDOUT_FILENO又对应回屏幕了, 然后缓冲中的内容和后来的数据都输到屏幕上了。 |
|