C编程fflush 函数

最近学习计算机系统第八章 异常的时候涉及到fflush函数的相关知识,有些疑惑,就做了几个小的测试函数试验一下
首先需要知道stdout采用的是行缓冲模式,即printf中如果不加换行符,程序是不会直接在屏幕上打印printf中的内容的,只有当程序碰到
1、\n
2、程序结束
3、调用fflush函数
才会在屏幕上打印。
我现在网站上搜了一点资料,发现有的实验做出来结果不对,索性就直接写一个博客,防止自己忘了。
首现看这个函数1:

主要注意函数的输出结果,函数不会像我们想象的那样先输出wulei,然后再每个一秒输出一个".",而是一起输出,直接最后一行直接出来。
再看函数2:

再看函数2,程序作了一丝丝改动,“wulei\n”和fflush(stdout),我们可以看到程序先将wulei打印出来之后换行,再每隔一秒打印"."。
再看函数3:

我调用了fork()函数创造了一个子进程,发现函数先将wulei打印,之后一行一次性输出,注意输出了两个test,令人疑惑。
函数4:

我在test后面加上了\n,程序先打印了wulei(未换行),再打印了test(换行)。
从上面四个实验其实已经大概看明白到底是怎么回事了。
重点分析3,4:
实验三为什么会出现两个test呢,是因为fork函数调用之后会创建一个和父进程几乎完全相同的子进程,享用共同的stdout区,这是后缓冲区中的wulei已经被函数fflush清除掉了,还剩下test,所以子进程也可以输出test,而且test之后没有\n,所以要等到程序终止时才会打印在屏幕上,是一整行输出。
实验4中test后面加上\n,也等于从缓冲区中输出,此时缓冲区为空,所以子进程也没有东西输出,所以只有一个test。

c fflush函数相关推荐

  1. linux fflush函数,fflush - wwliu的个人页面 - OSCHINA - 中文开源技术交流社区

    概述 函数名: fflush 功 能: 清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件 头文件: #include 原型:int fflush(FILE *stream) #include # ...

  2. fwrite函数与fflush函数

    以下内容源于网络资源的学习与整理,欢迎交流. 一.fwrite函数 1.函数原型 size_t fwrite(const void *ptr, size_t size, size_t nmemb,FI ...

  3. fflush函数有什么作用?

    说明: 有的朋友对本文的程序结果提出质疑,所以这里说一下,我是在Windows VC++6.0上测试的, 请注意平台和环境的不同. 先来复习一个简单单词吧: flush(注意只有一个f):冲洗,冲刷, ...

  4. linux fflush函数,sleep函数和fflush函数

    看了编程之美这本书,第一个小问题中用到了sleep函数,亲自尝试发现很多问题,在这里记录一下.首先sleep函数在windows和linux中有很多不同之处.在windows中s是大写的,叫Sleep ...

  5. fflush函数作用浅析

    一.fflush函数:更新缓存区 头文件:#include <stdio.h> 函数定义:int fflush(FILE *stream); 函数说明:fflush()会强迫将缓冲区内的数 ...

  6. php fflush失败,php fflush 函数_PHP教程

    php fflush 函数 fflush ( PHP 4中" = 4.0.1 , PHP 5中) fflush -刷新输出到一个文件 描述 布尔fflush (资源$处理) 此功能部队写入所 ...

  7. linux中fflush函数和printf函数 【转】

    本文转载自:http://blog.chinaunix.net/uid-30058258-id-5029847.html printf是一个行缓冲函数 printf函数是标准函数,最终会调用到系统调用 ...

  8. linux系统fflush函数

    在linux系统里面,一般都是行刷新,也就是要输出的内容会先放在缓冲区里面,直到遇到换行符,才会将缓冲区里的内容全部输出到屏幕或者文件中. 函数原型 #include <stdio.h> ...

  9. sync、fsync、fdatasync、fflush函数区别和使用举例

    sync.fsync.fdatasync.fflush函数区别和使用举例 Linux/unix在内核中设有缓冲区.高速缓冲或页面高速缓冲,大多数磁盘I/O(block device)都通过缓冲进行,当 ...

  10. fflush函数的深入理解

    本人昵称sky,欢迎与各位多多交流学习 这样的c程序想必大家都不陌生,fflush()这个函数有清除输入输出缓存的功能,那很多人就会问了,什么是清除输入输出缓存呢? 其实就是我们在printf输出的时 ...

最新文章

  1. 2022-2028年中国数据中台行业深度调研及投资前景预测报告(全卷)
  2. 近期AI领域8篇精选论文(附论文、代码)
  3. 如何挑选适合的前端框架(去哪儿网前端架构师司徒正美)
  4. [C++STL]常用拷贝和替换算法
  5. python取文本中间_Python读取两个字符串之间的特定文本行
  6. [.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店...
  7. stripslashes和addslashes的使用方法
  8. 解读mysql的索引和事务的正确姿势 1
  9. 网站域名安全:泛解析处理及防护
  10. 【MIKE21】批处理依次打开模型文件运行模型
  11. EAGLE转Protel文件
  12. 如何在 Windows 10 上完全禁用 UAC
  13. 球面绘制六边形——二维平面坐标转成三维球面坐标
  14. Java实现隐藏文件夹
  15. 台湾大学林轩田机器学习技法课程学习笔记8 -- Adaptive Boosting
  16. cgcs2000大地坐标系地图_测绘人必备!从地方坐标系到2000国家大地坐标系的转换...
  17. 洛谷 P1315 观光公交
  18. 华为云桌面--引领移动办公新潮流
  19. lisp注册注册机源码_[求助]请教在lisp中加入注册码
  20. 高中数学基础-2.3幂函数

热门文章

  1. 课堂派题库格式转换程序
  2. 解决底部横杠遮挡问题(兼容苹果手机底部)
  3. 向中级程序员进击之路
  4. RTX自动配置客户端服务器地址
  5. 微信会员卡实现门店信息化会员管理
  6. uniapp开发关于视频播放器适配H5的全屏(横屏)操作
  7. 【Pixiv】搜图教程和搜图网站
  8. 两台计算机如何打印机共享打印机,多台电脑怎样共享一台打印机?方法就是这么简单!...
  9. 个人博客网站搭建-WordPress-NameSilo-云左虚拟主机
  10. graphpad做柱状图,GraphPad软件做图表,就这么简单!