文件io---低级io
特点:
不带缓存io
优点:
实时性高
1.io基本操作
文件描述符:文件io打开文件的标识
非负整型数,是内核为打开文件维护结构的数组下标
默认最多能打开1024文件
stdin-----0
stdout-----1
stderr-----2
函数:
open(2);
read(2);
write(2);
lseek(2);
<1>允许偏移的字节个数大于文件本身
<2>lseek()本身不进行读写操作
空洞文件
空洞文件本身不占用磁盘空间
close(2);
写一段代码,验证一个进程最多能打开多少个文件?
1021
2.文件的共享
dup(2);
dup2(2);
3.i/o效率
不带缓存,用户所指定的缓存区的大小就会影响io效率
并不是缓存区越大效率越高
推荐4096
4.原子操作
操作不能被分割(打断)
tmpfile();---->原子
tmpname()+creat();---->不原子
dup2();---->原子
close()+dup()---->不原子
5.刷新内核缓存
sync(2);//刷新缓存区到内核io队列,不阻塞
fsync(2);//阻塞,直到文件的数据和inode信息全部刷新在磁盘空间才会返回
fdatasync(2);//阻塞,只是文件的数据刷新在磁盘空间才会返回
6.fcntl(2);
<1>复制文件描述符
<2>改变文件描述符标识
<3>改变文件状态标识
<4>文件锁
<5>记录锁
ioctl();