博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
APUE学习笔记-文件IO
阅读量:2195 次
发布时间:2019-05-02

本文共 1493 字,大约阅读时间需要 4 分钟。

1      文件I/O

1、  lseek的返回值应该判断是否为0,而不是小于0。

2、  偏移量可以大于文件大小。这个时候会有文件空洞。

3、  可以统计程序的运行时间:用户cpu(用户态),系统cpu(内核态),墙上时间(总是将)。time –p ./execute

4、  open加上标志:O_CREATE和O_EXCL可以判断文件是否存在。

5、  dup和dup2可复制文件描述符。并可指定复制后的描述符。

6、  linux ext2文件系统不支持O_SYNC标志。可以通过fsync函数来实现。

2      文件和目录

1、  文件可以截断:truncate()

2、  remove可以删除文件或者目录的连接。

3、  rename可以为文件或者目录更改名称。不过有很多注意。

4、  mkdir和rmdir创建和删除目录。

5、  chdir,fchdir,getcwd:更改路径,获取路径。

6、  Unix对目录的深度有限制吗?

 

3      标准IO库

1、  流的定向是什么作用?fwide函数可以查看,设定流的定向。

2、  缓存的三个类型:1)全缓冲,填满缓冲区才进行读写。2)行缓冲,遇到换行符,进行IO,或者行缓冲区填满,即使没有换行符,也要IO。3)不缓冲。

3、  标准出差时不缓冲的,打开至终端设备的流程是行缓冲的,其他是全缓冲的。

4、  流的缓冲可以通过函数setbuf或者setvbuf来进行设置。必须在流打开后,使用前进行设置(如果在使用后设置什么效果?失败?段错误?成功?)。

5、  setbuf如果buf为Null,则是关闭缓冲。如果与终端设备关联,某些设备也会设置为行缓冲。

 

函数

mode

buf

缓冲区及场地

缓冲类型

setbuf

非空

长度为BUFSIZE的用户buf

全缓冲或行缓冲

NULL

无缓冲区

不带缓冲

setvbuf

_IOFBF

非空

长度为size的用户buf

全缓冲

NULL

合适长度的系统缓冲区,一般是块的长度。

_IOLBF

非空

长度为size的用户buf

行缓冲

NULL

合适长度的行缓冲

_IONBF

忽略

无缓冲

无缓冲

6、  如果fflush参数为Null,会清空所有缓存。

7、  打开流函数:fopen,freopen(指定流上打开),fdopen。

8、  打开方式:

限制

r

w

a

r+

w+

a+

文件必须存在

 

 

 

 

擦除以前内容

 

 

 

 

流可以读

 

 

流可以写

 

流只写在尾端

 

 

 

 

 

9、  IO效率:对CPU来说,不同的方案差别在于用户调用和系统调用的次数,影响的因素包括缓存大小。

10、          二进制io:fread函数返回的nobj小于传入的nobj,则可能出错,或者到达尾端,需要调用ferror或者feof。

11、          fread函数的局限在于无法读网络上的文件,因为存放方式不同,而且整数浮点数存储也不相同。网络文件需要通过高级协议读写,比如smbd。

12、          定位流函数:ftell,fseek。

13、          几个格式化函数:

a)      sprintf:会在结尾自动添加null,但是返回值中不包含这个字节。buf其他的部分不变。

b)     snprintf:1)返回值不包括null,另外,其实返回的是格式化后字符串的大小,而不是写进去的字符串的大小。2)不会将其他的部分清空为0。这一点和strncpy不同。3)如果返回值大于等于n,则说明缓冲区溢出了,有东西被丢弃了。

14、          fileno可以获得流的描述符。

15、          比文件IO更高效的函数:fio,sfio,mmap。抽时间可以研究一下。

 

转载地址:http://wqsub.baihongyu.com/

你可能感兴趣的文章
搞懂分布式技术12:分布式ID生成方案
查看>>
搞懂分布式技术13:缓存的那些事
查看>>
搞懂分布式技术14:Spring Boot使用注解集成Redis缓存
查看>>
搞懂分布式技术15:缓存更新的套路
查看>>
搞懂分布式技术16:浅谈分布式锁的几种方案
查看>>
搞懂分布式技术17:浅析分布式事务
查看>>
搞懂分布式技术18:分布式事务常用解决方案
查看>>
搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务
查看>>
搞懂分布式技术20:消息队列因何而生
查看>>
搞懂分布式技术21:浅谈分布式消息技术 Kafka
查看>>
后端技术杂谈1:搜索引擎基础倒排索引
查看>>
后端技术杂谈2:搜索引擎工作原理
查看>>
后端技术杂谈3:Lucene基础原理与实践
查看>>
后端技术杂谈4:Elasticsearch与solr入门实践
查看>>
后端技术杂谈5:云计算的前世今生
查看>>
后端技术杂谈6:白话虚拟化技术
查看>>
后端技术杂谈7:OpenStack的基石KVM
查看>>
后端技术杂谈8:OpenStack架构设计
查看>>
后端技术杂谈9:先搞懂Docker核心概念吧
查看>>
后端技术杂谈10:Docker 核心技术与实现原理
查看>>