- 一、文件IO --->fd(文件描述符)
- 打开文件open
- 读、写文件read/write
- 关闭文件close
- #include <sys/types.h>
- #include <sys/stat.h>
- #include<fcntl.h>
- 文件描述符:操作系统中已打开文件的标识符。小的、非负的整形数据
- 范围:0-1023(共1024个)
- 分配原则:最小未被使用原则
- 系统默认已经打开的三个文件占用了0(标准输入设备),1(标准输出设备),2标准出错设备)这三个文件描述符
- 已打开文件需及时关闭,否则文件描述符使用完时会造成文件描述符泄漏
- flags:打开方式
- O_RDONLY :只读方式
- O_WRONLY:只写方式
- O_RDWR:可读可写
- O_CREAT:创建文件
- O_TRUNC:清空文件
- O_APPEND:追加写
- open :int open(const char *pathname, int flags); int open(const char *pathname,int flags,mode_t mode);
- 功能:打开文件并获得一个文件描述符
- 参数:pathname:要打开的文件的文件名;flags:打开方式;mode:文件读写执行操作权限(IWXTWXIWX、111111111 --->0777、IW-1W-I--、110110100 --->0664)
- 返回值:成功:文件描述符;失败:-1
- write :ssize_t write(int fd, const void *buf, size_t count);
- 功能:向文件中写入数据
- 参数:fd:文件描述符;buf:要写入的数据的首地址;count:要写入的字节数
- 返回值:;成功:实际写入的字节数;失败:-1
- read :ssize_t read(int fd, void *buf, size_t count);
- 功能:从文件中读取数据
- 参数:fd:文件描述符;buf:存储数据的空间首地址;count:希望读取的字节数
- 返回值:成功:实际读到的字节数;失败:-1;读到文件末尾:0
- 文件定位函数lseek :off_t lseek(int fd, off_t offset, int whence);
- 功能:文件读写位置定位
- 参数:fd:文件描述符;offset:偏移量(字节);whence:要偏移的相对位置
- SEEK_SET:文件开头位置
- SEEK_CUR:文件当前读写位置
- SEEK_END:文件末尾
- 返回值:成功:返回当前读写位置到文件开头的偏移量;失败:-1
- 二、标准IO与文件IO的区别
- 标准IO
- 属于C库函数,移植性强
- 标准IO是系统调用的一次封装,增加了缓冲区,目的是提高数据读写的效率
- 主要用在对普通文件的操作
- 文件IO
- 属于系统调用,只能用于Linux操作系统,移植性弱
- 文件IO无缓冲区
- 主要应用在对硬件的操作,也可以操作普通文件
- 缓冲区
- 行缓冲 1k(1024字节)--->人机交互界面、终端
- 行缓冲区被刷新的方法
- 程序结束,自动刷新缓冲区
- 遇到“\n”刷新
- fflush(强制刷新)
- 缓冲区满时自动刷新
- 行缓冲区被刷新的方法
- 全缓冲 4k(4096字节)--->文件缓冲区
- 全缓冲区被刷新的方法
- 程序结束,自动刷新缓冲区
- fflush(强制刷新)
- 文件关闭刷新
- 缓冲区满时自动刷新
- 全缓冲区被刷新的方法
- 无缓冲 0k --->出错信息对应的设备
- stderr(标准出错设备)--->无缓冲
- 行缓冲 1k(1024字节)--->人机交互界面、终端
- 标准IO