您的位置:首页 > 产品设计 > UI/UE

APUE学习笔记-文件IO

2012-06-10 22:12 204 查看

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。抽时间可以研究一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: