1.概念
是系统调用中的一组输入输出的函数接口
2. 特点:
1)没有缓冲机制,每次操作都会引起系统调用
2)围绕文件描述符进行操作,文件描述符是非负整数,从0开始依次增加。
3)文件IO默认打开了三个文件描述符,0(标准输入)、1(标准输出)、2(标准出错)
4)可以操作任意类型的文件,b c s p - l
3.函数接口:
1.打开文件
int open(const char *pathname, int flags);
功能:打开文件
参数:pathname:文件路径名
flags:打开文件的方式
O_RDONLY:只读
O_WRONLY:只写
O_RDWR:可读可写
O_CREAT:文件不存在创建
O_TRUNC:清空文件内容
O_APPEND:追加
返回值:成功:文件描述符
失败:-1
2.关闭文件
int close(int fd);
3.读写文件
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
功能:从一个已打开的可读文件中读取数据
参数:fd 文件描述符
buf 存放位置
count 期望的个数
返回值:成功:实际读到的个数
返回-1:表示出错,并设置errno号
返回0:表示读到文件结尾
ssize_t write(int fd, const void *buf, size_t count);
功能:向指定文件描述符中,写入 count个字节的数据。
参数:fd 文件描述符
buf 要写的内容
count 期望值
返回值:成功:实际写入数据的个数
-1:失败
4.文件定位操作
off_t lseek(int fd, off_t offset, int whence);
功能:设定文件的偏移位置
参数:fd:文件描述符
offset偏移量
正数:向文件结尾位置移动
负数:向文件开始位置
whence 相对位置
SEEK_SET 开始位置
SEEK_CUR 当前位置
SEEK_END 结尾位置
返回值:成功:文件的当前位置
失败:-1
5.获取文件属性
int stat(const char *path, struct stat *buf);
功能:获取文件属性
参数:path:文件路径名
buf:保存文件属性信息的结构体
返回值:成功:0
失败:-1
struct stat {
ino_t st_ino; /* inode number */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
off_t st_size; /* total size, in bytes */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last status change */
};
6.标准IO和文件IO区别
标准IO
文件IO
定义
C库提供的输入输出的函数
系统调用中的一组输入输出的函数
缓存区
有
无
操作方式
流
stdin、stdout、stderr
文件描述符
0、1、2
可操作文件
普通文件
任意类型的文件
函数接口
打开文件
关闭文件
读写文件
文件定位操作
- fopen\freopen
- fclose
- fgetc/fputc、fgets/fputs、fread/fwrite
- fseek\rewind\ftell
- open
- close
- read/write
- lseek