今天是学习嵌入式的第30天
前几天换了个设备,出了点儿小插曲,断更了几天,实际上我已经学到线程了,更新还在标准IO,看客友子们不好意思,我这几天会陆续补上前边差的!
补上标准IO的小尾巴,今天我们说文件IO和目录IO(小作坊下药比较猛,各位且看)!
fseek
简单理解:文件里面有个看不见的 “读写光标”,读、写的时候光标会自动往后挪,fseek就是手动挪这个光标位置。
第一个参数就是文件指针FILE*;第二个是偏移多少字节,正数往后挪,负数往前挪;第三个参数是从哪个起点开始算偏移。
SEEK_SET:起点选文件最开头
SEEK_CUR:起点选光标现在待的位置
SEEK_END:起点选文件的末尾(文件最后一个字符的后面)
成功返回 0,出错返回‑1。
比如fseek(fp,0,SEEK_END),直接把光标挪到文件尾巴上。
ftell
用来查:当前光标距离文件开头有多少个字节,返回这个字节数。
经常搭配 fseek 求整个文件大小:先把光标挪到文件末尾,调用 ftell 拿到的数字就是文件总字节大小。
rewind
直接把光标一键拽回文件最开头。等价于fseek(fp,0,SEEK_SET)额外还会清除文件的错误标记。
文件 IO(系统调用,open/read/write/lseek/close)
标准 IO(fopen 那一套)是 C 库函数,内部封装了文件 IO 系统调用,自带缓冲区;文件 IO 是操作系统直接给的接口,没有缓冲区,适合设备、管道这类特殊文件。
open
用来打开文件,标准 IO 是fopen,系统调用用open。
打开成功返回一个叫文件描述符 fd的小整数(0、1、2 系统已经占掉:0 标准输入,1 标准输出,2 标准错误);打开失败返回‑1。
flags 是打开模式,可以多个模式用|拼起来:
O_RDONLY只读、O_WRONLY只写、O_RDWR读写;
O_CREAT文件不存在就新建,用这个的时候必须给第三个参数,指定新建文件权限;
O_TRUNC:文件存在就把里面内容全部清空;
O_APPEND:写的时候永远追加到文件末尾。
close
用完文件描述符一定要 close (fd),把文件关掉,释放资源。程序退出系统会自动关,但写代码最好手动关。
read
从打开好的文件里面读数据。
参数:文件描述符 fd、存读到数据的缓冲区 buf、想要读多少字节。
返回值:读到多少字节;读到文件末尾返回 0;出错返回‑1。
注意:不一定每次都能读到你想要的字节数,网络、管道场景会出现读不够的情况。
write
往文件里面写数据。参数 fd、要写的数据首地址、打算写多少字节。返回真正写进去的字节数,失败‑1。
lseek
和标准 IO 的fseek功能一模一样,只不过操作对象是文件描述符 fd,不是 FILE 指针,同样三个基准SEEK_SET / SEEK_CUR / SEEK_END。成功返回现在光标距离开头的字节数,失败‑1。
注意:管道、套接字不能用 lseek,只有普通磁盘文件支持挪光标。
目录 IO(操作文件夹)
opendir
打开一个文件夹,不能打开普通文件。返回DIR*目录流指针,后续靠这个指针读取文件夹里面内容;失败返回 NULL。
readdir
从打开的目录流里面,读取文件夹里面的一项(一个文件或者子文件夹)。返回一个结构体指针,结构体里面存文件名、文件类型等信息;读到文件夹全部内容结束返回 NULL。
closedir
关闭目录流,和 close 对应,用完 opendir 必须调用 closedir 释放资源。
mkdir
创建文件夹,第二个参数指定新建文件夹权限。注意:只能新建一层文件夹,不能一次性创建多级嵌套目录。
rmdir
删除文件夹,只能删空文件夹,文件夹里面有东西就会调用失败。
getcwd
获取程序当前工作目录的绝对路径,相当于终端命令 pwd。 把路径字符串填到你给的字符数组里面。
chdir
修改程序的当前工作目录,相当于终端的 cd 命令。改完之后,程序里写的相对路径就以这个新目录为基准。
目录权限:
目录的 r 权限:能看目录里面有哪些文件名;
目录的 w 权限:可以在这个目录新建、删除文件;
目录的 x 权限:可以 cd 进入这个目录。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)