文件io ,缓冲区
文件IO:系统调用
Linux内核专门为应用层提供的文件操作方法。
1.打开文件open
2.读、写文件read/write
3.关闭文件close
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

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