这里写目录标题
文件IO-(linux系统提供)
系统调用:当我们的应用程序要使用一些底层的功能的时候,不应该自行访问底层,而应该向操作系统发出请求。
特点:
- 不带缓冲区
- 操作系统直接提供的函数接口
- 调用系统调用是很耗费资源的
文件描述符:
- Linux系统为程序中每个打开的文件都分配一个文件描述符,文件IO操作通过文件描述符来完成。
- 文件描述符在形式上是一个顺序分配的非负整数。从0开始分配,依次递增。比如 0,1,2表示 stdin stdout stderr,一般最大打开的文件描述符数量为1024(0~1023)
文件IO函数
fdopen
FILE *fdopen(int fd, const char *mode);
- 功能:文件IO转换成标准IO
- 参数;
fd: 文件描述符
mode: 打开方式- 返回指:
成功:流指针
失败:NULL
open
int open(const char *pathname, int flags, mode_t mode);
- 功能:打开文件
- 参数:
pathname: 文件的路径名
flags: 打开方式
O_RDONLY:只读
O_WRONLY:可写
O_RDWR:读写
O_APPEND:追加
O_TRUNC:清零
O_CREAT:创建
mode: 文件的权限 0666- 返回指:
成功:文件描述符fd
失败:-1
close
int close(int fd) -关闭文件
read
ssize_t read(int fd, void *buf, size_t count);
- 功能:从文件中读取count字节的数据到内存
- 参数:
fd: 文件描述符
buf: 内存地址
count: 读取的字节数 100个字节- 返回值:
成功:
0 返回实际读取到的字节数
== 0 读到文件的末尾
失败:
<0 读取失败
write
ssize_t write(int fd, const void *buf, size_t count);
- 功能:把内存中的数据写入到文件中
- 参数:
fd: 文件描述符
buf: 内存地址
count: 写入的字节数 100个字节- 返回值:
成功:返回实际写入的字节数
失败:-1
lseek
off_t lseek(int fd, off_t offset, int whence);
- 功能:定位文件指针
- 参数:
fd: 文件描述符
offset: 偏移量
100:向后偏移100个字节
-100:向前偏移100个字节
whence: 基点
SEEK_SET:文件开头
SEEK_END:文件末尾
SEEK_CUR:文件当前位置- 返回值:
成功:0
失败:-1
标准IO-(C库提供)
C库函数:在系统调用接口之上封装的接口,一个C库函数可以封装多个系统调用函数。
作用:
- 增强了代码的可移植性,复用性
- 提高了效率。
标准IO增加了一个【缓冲机制】FILE:系统会自动为使用的文件在内存中开辟一片空间,来存储该文件的详细信息,这个空间类型为 FILE 结构体类型,该结构体由系统设计。
FILE *:流指针,在标准IO中,每次成功打开一个文件,都会返回一个流指针,这个流指针就描述了一个文件,所有的标准IO都围绕流指针来进行。
标准IO函数
fopen
FILE *fopen(const char *path, const char *mode);
- 功能:打开文件
- 参数:
path: 文件的路径 “./1.txt”
mode: 打开方式
r : 以只读的方式打开文件,文件必须存在
r+ : 以读写的方式打开文件,文件必须存在
w : 以写的方式打开文件, 文件不存在,则创建
文件存在,则清空
w+ : 以读写的方式打开文件, 文件不存在,则创建
文件存在,则清空
a : 以追加的方式打开文件(写), 文件不存在,则创建
文件存在,则再文件的末尾追加
a+ : 以追加的方式打开文件(读写), 文件不存在,则创建
文件存在,则再文件的末尾追加- 返回值:
成功: FILE * (流指针 === 结构体指针)
失败: NULL
fclose
int fclose(FILE *fp);
- 功能:关闭文件
- 参数:
fp:流指针
freopen
FILE *freopen(const char *path, const char *mode, FILE *stream);
- 功能:改变流指针的指向
- 参数:
path: 文件的路径名
mode: 打开方式
stream:流指针
fgetc
int fgetc(FILE *stream);
- 功能:读取一个字节的数据
- 参数:
stream: 流指针- 返回值:
成功:返回这个字节
失败:-1
fputc
int fputc(int c, FILE *stream);
- 功能:写入一个字节的数据
- 参数:
c: 字节
stream: 流指针
fgets
char *fgets(char *s, int size, FILE *stream);
- 功能:读取一行的数据
- 参数:
s: 内存地址 char s[N];
size: 内存空间的大小 N
stream: 流指针- 返回值:
成功:返回读取字符串的首地址
失败:NULL
fputs
int fputs(const char *s, FILE *stream);
- 功能:写入一行的数据
- 参数:
s: 内存地址 char s[N];
stream: 流指针- 返回值:
成功:1
失败:-1
fseek
int fseek(FILE *stream, long offset, int whence);
- 功能:定位文件指针
- 参数:
stream: 流指针
offset: 偏移量
100:向后偏移100个字节
-100:向前偏移100个字节
whence: 基点
SEEK_SET: 文件开头
SEEK_END: 文件末尾
SEEK_CUR: 文件当前位置- 返回值:
成功:0
失败:-1
ftell
long ftell(FILE *stream);
返回值:当前文件指针的位置
rewind
void rewind(FILE *stream);
功能:文件指针返回到文件开头