嵌入式学习Day26
今天开始学习文件IO
5.文件IO:系统调用
Linux内核专门为应用层提供的文件操作方法:
1)打开文件 open
2)读、写文件 read/write
3)关闭文件 close
//文件IO所需头文件
#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:追加写
标准IO: 文件IO:
"r" O_RDONLY
"r+" O_RDWR
"w" O_WRONLY|O_CREAT|O_TRUNC,0664
"w+" O_RDWR|O_CREAT|O_TRUNC,0664
"a" O_WRONLY|O_APPEND|O_CREAT,0664
"a+" O_RDWR|O_APPEND|O_CREAT,0664
mode:文件读写执行操作权限(当flag中有O_CREAT标志时,必须要增加mode操作权限)
rwxrwxrwx
111111111 ---->0777
rw-rw-r--
110110100 ---->0664
(mode&~umask)
111111111 110110100
&111111101 &111111101
111111101 -->0775 110110100
返回值:
成功:文件描述符
失败:-1
文件描述符:操作系统中已打开文件的标识符
小的、非负的整型数据
范围:0-1023(总共1024个)
分配原则:最小未被使用原则
文件描述符泄露:已打开的文件,使用完时,未及时关闭
标准IO-->FILE *-->FILE-->int fd;
文件IO-->fd(文件描述符)
操作系统已经打开的三个文件占用了0、1、2这三个文件描述符:
标准IO 文件IO
FILE * int
stdin ---->标准输入设备---->0
stdout---->标准输出设备---->1
stderr---->标准出错设备---->2
#include<unistd.h>
int close(int fd);
功能:关闭文件
ssize_t write(int fd, const void *buf, size_t count);
功能:向文件中写入数据
参数:
fd:文件描述符
buf:要写入的数据的首地址
count:要写入的字节数
返回值:
成功:实际写入的字节数
失败:-1
ssize_t read(int fd, void *buf, size_t count);
功能:从文件中读取数据
参数:
fd:文件描述符
buf:存储数据的空间首地址
count:希望读取的字节数
返回值:
成功:实际读到的字节数
失败:-1
读到文件末尾:0
4)文件定位函数:
lseek:
off_t lseek(int fd, off_t offset, int whence);
功能:文件读写位置定位
参数:
fd:文件描述符
offset:偏移量(字节)
whence:要偏移的相对位置
SEEK_SET:文件开头位置
SEEK_CUR:文件当前读写位置
SEEK_END:文件末尾
返回值:
成功:返回当前读写位置到文件开头的偏移量
失败:-1
对比标准IO与文件IO:
标准IO:
1.属于C库函数,移植性强
2.标准IO是系统调用的一次封装,增加了缓冲区,目的是提高数据读写的效率
3.标准IO主要用在对普通文件的操作
文件IO:
1.属于系统调用,只能用于Linux操作系统,移植性弱
2.文件IO无缓冲区
3.文件IO主要应用在对硬件的操作,也可以操作普通文件

缓冲区:
1.行缓冲 1k(1024字节) ----> 人机交互界面、终端
缓冲区被刷新的方法:
1.程序结束,自动刷新缓冲区
2.遇到\n刷新
3.fflush()强制刷新
4.缓冲区满刷新
2.全缓冲 4k(4096字节) ----> 文件缓冲区
缓冲区被刷新的方法:
1.程序结束,自动刷新缓冲区
2.fflush()强制刷新
3.文件关闭刷新
4.缓冲区满刷新
3.无缓冲 0k ----> 出错信息对应的设备
stderr ---->无缓冲
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)