1.概念
文件io:
操作系统为了方便用户使用系统功能而对外提供的一组系统函数。
称之为 系统调用
其中有个 文件IO
一般都是对设备文件操作,当然也可以对普通文件进行操作。
一个基于Linux内核的没有缓存的IO机制
文件描述符 --- 系统调用这组函数中,对打开文件的 标识
整型数值
0~1023 //1024个
0 -- stdin
1 -- stdout
2 -- stderr
2.基本操作
a.打开 --- open
b.读写 --- read / write
c.关闭 --- close
文件IO操作特性
特性:
1 没有缓存区 (//可以认为数据直接交给了内核 )
2 操作对象不在是流(FILE *),而是文件描述符(整数)
3文件描述符
很小的非负的整数 int 0-1023
内核每打开一个文件就会获得一个文件 描述符
每个程序在启动的时候操作系统默认为其打开
三个描述符与流对象匹配:
0 ==>STDIN_FILENO === stdin
1 ==>STDOUT_FILENO == stdout
2 ==>STDERR_FILENO == stderr
库函数 本质上是 对系统调用 的封装
库函数:
优点:
a.方便,功能多
b.可移植性好
标准
不足:
c.可能存在 安全性 隐患
系统调用:
优点:
a.使用起来,简单 ,功能简单
b.安全性高
c.设备文件 ---- 文件IO ///dev/video0 ----> fopen();
缺点:
c.很多复杂功能需要自己封装设计
d.可移植性差
标准IO库: 系统调用
fopen open
r O_RDONLY
w O_WRONLY|O_CREAT|O_TRUNC
r+ O_RDWR
w+ O_RDWR |O_CREAT|O_TRUNC
a O_WRONLY|O_CREAT|O_APPEND
a+ O_RDWR |O_CREAT|O_APPEND
open("hello.c",O_RDONLY); //fopen("hello.c","r");
上图0666是给打开的文件加权限
打开一个文件代码如下图
实现cat函数
练习:
用文件IO方式实现文件拷贝
写一个空洞文件