c fflush函数
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函数相关推荐
- linux fflush函数,fflush - wwliu的个人页面 - OSCHINA - 中文开源技术交流社区
概述 函数名: fflush 功 能: 清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件 头文件: #include 原型:int fflush(FILE *stream) #include # ...
- fwrite函数与fflush函数
以下内容源于网络资源的学习与整理,欢迎交流. 一.fwrite函数 1.函数原型 size_t fwrite(const void *ptr, size_t size, size_t nmemb,FI ...
- fflush函数有什么作用?
说明: 有的朋友对本文的程序结果提出质疑,所以这里说一下,我是在Windows VC++6.0上测试的, 请注意平台和环境的不同. 先来复习一个简单单词吧: flush(注意只有一个f):冲洗,冲刷, ...
- linux fflush函数,sleep函数和fflush函数
看了编程之美这本书,第一个小问题中用到了sleep函数,亲自尝试发现很多问题,在这里记录一下.首先sleep函数在windows和linux中有很多不同之处.在windows中s是大写的,叫Sleep ...
- fflush函数作用浅析
一.fflush函数:更新缓存区 头文件:#include <stdio.h> 函数定义:int fflush(FILE *stream); 函数说明:fflush()会强迫将缓冲区内的数 ...
- php fflush失败,php fflush 函数_PHP教程
php fflush 函数 fflush ( PHP 4中" = 4.0.1 , PHP 5中) fflush -刷新输出到一个文件 描述 布尔fflush (资源$处理) 此功能部队写入所 ...
- linux中fflush函数和printf函数 【转】
本文转载自:http://blog.chinaunix.net/uid-30058258-id-5029847.html printf是一个行缓冲函数 printf函数是标准函数,最终会调用到系统调用 ...
- linux系统fflush函数
在linux系统里面,一般都是行刷新,也就是要输出的内容会先放在缓冲区里面,直到遇到换行符,才会将缓冲区里的内容全部输出到屏幕或者文件中. 函数原型 #include <stdio.h> ...
- sync、fsync、fdatasync、fflush函数区别和使用举例
sync.fsync.fdatasync.fflush函数区别和使用举例 Linux/unix在内核中设有缓冲区.高速缓冲或页面高速缓冲,大多数磁盘I/O(block device)都通过缓冲进行,当 ...
- fflush函数的深入理解
本人昵称sky,欢迎与各位多多交流学习 这样的c程序想必大家都不陌生,fflush()这个函数有清除输入输出缓存的功能,那很多人就会问了,什么是清除输入输出缓存呢? 其实就是我们在printf输出的时 ...
最新文章
- 2022-2028年中国数据中台行业深度调研及投资前景预测报告(全卷)
- 近期AI领域8篇精选论文(附论文、代码)
- 如何挑选适合的前端框架(去哪儿网前端架构师司徒正美)
- [C++STL]常用拷贝和替换算法
- python取文本中间_Python读取两个字符串之间的特定文本行
- [.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店...
- stripslashes和addslashes的使用方法
- 解读mysql的索引和事务的正确姿势 1
- 网站域名安全:泛解析处理及防护
- 【MIKE21】批处理依次打开模型文件运行模型
- EAGLE转Protel文件
- 如何在 Windows 10 上完全禁用 UAC
- 球面绘制六边形——二维平面坐标转成三维球面坐标
- Java实现隐藏文件夹
- 台湾大学林轩田机器学习技法课程学习笔记8 -- Adaptive Boosting
- cgcs2000大地坐标系地图_测绘人必备!从地方坐标系到2000国家大地坐标系的转换...
- 洛谷 P1315 观光公交
- 华为云桌面--引领移动办公新潮流
- lisp注册注册机源码_[求助]请教在lisp中加入注册码
- 高中数学基础-2.3幂函数