APUE学习笔记-文件IO

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。抽时间可以研究一下。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值