免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2352 | 回复: 4
打印 上一主题 下一主题

[Linux] fclose(stdout)关闭的到底是C标准库的流,还是系统的fd? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-01-25 12:15 |只看该作者 |倒序浏览
之前我对于标准I / O的理解是,在系统输入输出fd的基础上,做一个C语言运行时库的包装,因此fclose(stdout)应该是关闭了stdout这个"流",而系统的STDOUT_FILENO应该没有被关闭。
但是我测试了一下,如下:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<unistd.h>
  4. int main()
  5. {
  6.     size_t w = fwrite("hw\n", 3, 1, stdout);
  7.     fclose(stdout);
  8.     write(STDOUT_FILENO, "again\n", 3);
  9.     return 0;
  10. }
复制代码
结果是只打印了hw一次,并没有打印again。这是为什么呢,和我的预期有点不一致啊。fclose(stdout)不仅仅是在C运行时库这一层起了作用,看起来还影响了系统的底层行为。这样的话,C运行时库的I/O流就不仅仅是一个包装了,它本身的状态也影响了系统API的调用?
求解释!

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2015-01-25 15:52 |只看该作者
回复 1# centos_71


    fclose 本身就是那么个行为,人家也没说不会影响系统的状态。

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
3 [报告]
发表于 2015-01-26 08:27 |只看该作者
centos_71 发表于 2015-01-25 12:15
之前我对于标准I / O的理解是,在系统输入输出fd的基础上,做一个C语言运行时库的包装,因此fclose(stdout) ...


这么理解也不错!fclose封装了系统调用close(fd),只是另外还做了释放缓冲的事。

论坛徽章:
46
2015小元宵徽章
日期:2015-03-06 15:58:18羊年新春福章
日期:2015-04-14 10:37:422015年亚洲杯之阿曼
日期:2015-04-14 10:41:50NBA常规赛纪念章
日期:2015-05-04 22:32:03NBA季后赛大富翁
日期:2015-05-04 22:34:11菠菜明灯
日期:2015-05-04 22:35:49新奥尔良黄蜂
日期:2015-05-04 22:49:2315-16赛季CBA联赛之广夏
日期:2015-12-11 15:02:342015年亚洲杯之巴勒斯坦
日期:2015-03-04 19:56:562015年亚洲杯之阿联酋
日期:2015-03-04 11:19:04休斯顿火箭
日期:2015-03-02 16:32:11纽约尼克斯
日期:2015-03-02 16:09:04
4 [报告]
发表于 2015-01-26 09:52 |只看该作者
标准库io中加了一层上层的缓冲,其他的就是封装

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
5 [报告]
发表于 2015-01-28 11:15 |只看该作者
都是FILE*,fclose管你里面是哪个fd。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP