UNIX环境高级编程笔记之标准I/O库

一、总结

  文件I/O一章讲了不带缓冲的I/O,本章讲的是带缓冲的I/O。不带缓冲针对的是内核的系统调用,而带缓冲针对的是用户空间的标准库函数,是基于带缓冲的I/O实现的。不带缓冲的I/O通过文件描述符的方式来引用一个文件,而带缓冲的I/O则通过文件流(stream)的方式来引用文件。至于为什么要用流的方式,原因就是带缓冲区,这样文件的读写就要经过缓冲区做缓冲,就像水流一样。

引入标准IO库的目的是为了提高IO的效率,避免频繁的进行read/write系统调用,而系统调用会消耗较多的资源。因此标准IO库引入了IO缓存,通过累积一定量的IO数据后,然后集中写入到实际的文件中来减少系统调用,从而提高IO效率。标准IO库会自动管理内部的缓存,不需要程序员介入。然而,也正是因为我们看不到标准IO库的缓存,有时候会给我们带来一定的迷惑性。

  缓冲区的类型分为三种:

1)全缓冲:在填满标准I/O缓冲区后才进行实际I/O操作,对于磁盘上的文件通常是由标准I/O库实施全缓冲的,在一个流上执行第一次I/O操作时,相关标准I/O函数通常调用malloc等函数来获得所需的缓冲区。

2)行缓冲:这种情况下,当在输入输出中遇到换行符时,标准I/O库执行I/O操作,因此,当涉及终端设备交互时,才使用行缓冲。

3)不带缓冲:即标准I/O库不对字符进行缓冲存储,那么这种情况就直接调用的是read、write等系统调用函数。这种情况一般用在需要对输入输出及时响应的情况下,如标准出错流stderr通常是不带缓冲的。

二、看图说话

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JetpropelledSnake

Python Web学习笔记之进程与线程

要了解二者的区别与联系,首先得对进程与线程有一个宏观上的了解。     进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系...

30070
来自专栏Ken的杂谈

单点登录(SSO)的设计与实现

SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。https://baike....

49130
来自专栏生信小驿站

R.python常见问题②(一些需要编译的包)

在R语言的广泛包中,大部分可以直接install.packages()直接命令安装,但是有些包安装过程比较复杂,例如'lightgbm,ggplot2所依赖的‘...

13620
来自专栏北京马哥教育

使用 nice、cpulimit 和cgroups 获取进程的 CPU 使用率

Linux内核是一个令人难以置信的马戏团的表演者,可以很小心的玩弄许多进程和它们的资源需求,来保证你的服务器一直嗡嗡作响。内核也是关于公平的一切:当有资源竞争时...

39040
来自专栏24K纯开源

VS2010下编译配置Boost_1.53

一、准备工作 1、下载最新版本的boost库.所在地址:boost_1_53_0.zip.官方推荐7z压缩格式的,因为其压缩效率更好,相应包的大小也比较小。 2...

35090
来自专栏Sorrower的专栏

内核必须懂(二): 文件系统初探

13150
来自专栏LeoXu的博客

[转]RPM使用详解 来源:互联网 作者:佚名

在Linux 操作系统中,有一个系统软件包,它的功能类似于Windows里面的“添加/删除程序”,但是功能又比“添加/删除程序”强很多,它就是 Red Hat ...

8420
来自专栏Java后端技术栈

浅谈Nginx服务器的内部核心架构设计!

Nginx---Ngine X,是一款免费的、自由的、开源的、高性能HTTP服务器和反向代理服务器;也是一个IMAP、POP3、SMTP代理服务器;Nginx以...

17620
来自专栏FreeBuf

支持MACRBACABAC多种模型的Golang访问控制框架 – casbin

casbin casbin是一个用Go语言打造的轻量级开源访问控制框架(https://github.com/hsluoyz/casbin),目前在GitHub...

49680
来自专栏烂笔头

Django 1.10中文文档-第一个应用Part1-请求与响应

目录[-] 在本教程中,我们将引导您完成一个投票应用程序的创建,它包含下面两部分: 一个可以进行投票和查看结果的公开站点; 一个可以进行增删改查的后...

41250

扫码关注云+社区

领取腾讯云代金券