星计划打卡38天
===========
LCD每个像素显示的数据来自于显存,嵌入式中显存直接使用内存,也就是利用一段内存空间来存储显示数据。当显存和LCD建立映射关系,往显存上写什么数据,LCD就显示对应的内容。由于历史原因,LCD按行扫描。

显存在内核中,用户空间不能直接访问,需要将显存映射到用户空间才能访问,使用mmap函数实现映射。#include
void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);
参数:

addr - 映射内存的首地址,给NULL表示由系统选择映射地址

length - 映射区长度(是页的倍数)

prot - 映射区访问权限

PROT_READ:可读

PROT_WRITE:可写

PROT_EXEC:可执行

PROT_NONE:无权限

flags - 映射标志

MAP_SHARED:对映射区的修改要同步到文件

MAP_PRIVATE:对映射区的修改要不同步到文件

MAP_ANONYMOUS:映射物理内存

fd - 映射文件的描述符

offset - 映射位置离文件开头的距离
返回值:

成功返回映射区首地址,失败MAP_FAILE https://t.cn/z8AFbuu

#粤嵌科技停课不停学 #粤嵌星计划 day08
今日笔记:
标准IO
==========================
区别一:

系统IO采用文件描述符表示文件

标准IO采用FILE指针表示文件
区别二:

系统IO

0

1

2

#define STDIN_FILENO

0

#define STDOUT_FILENO

1

#define STDERR_FILENO

2

标准IO

stdin

stdout

stderr
区别三:
   系统IO,无缓冲区

标准IO,缓冲区
系统IO用文件描述符表示文件
标准IO用FILE *表示文件
1.文件打开
FILE *fopen( const char *pathname,const char *mode);

返回值:成功 返回FILE类型指针(保存属性信息)

失败 NULL

参数:pathname->文件路径名

mode->r

只读

r+ 可读可写

w

只写

w+ 可读可写,若文件不存在则创建,存在则清空覆盖

a

以只写的方式在文件末尾追加

a+ 以可读写的方式在文件末尾追加
2.文件读写

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

返回值(重点): 成功 返回读取到的完整的数据块的个数

失败 -1

参数:ptr --》存放你读取的内容

size(重点) --》你要读取的数据块大小,字节

nmemb(重点) --》你打算读取多少个数据块

stream --》你要读取的那个文件

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

返回值(重点): 成功

nmemb是多少,返回值就是多少

3.文件的关闭

int fclose(FILE *stream);

4.文件偏移设置

int fseek(FILE *stream, long offset, int whence);

返回值:跟lseek不一样,成功 0

失败 -1

long ftell(FILE *stream);

返回值:成功 返回当前位置距离起始位置的字节数

void rewind(FILE *stream); //等价于 fseek(filep,0,SEEK_SET);

将文件偏移挪到起始位置
5.fgets fputs

fgetc

fputc

gets puts
char *fgets(char *s, int size, FILE *stream); //按行读取数据,一次最多读取一行(遇到回车结束读取)

返回值:成功 返回读取的一行数据的首地址

失败 NULL

参数:s --》存放读取到的一行数据

size --》你打算读取多少字节的数据

stream --》你要从哪个文件读取一行

int fputs(const char *s, FILE *stream);

返回值:成功 >0

失败 EOF

int fgetc(FILE *stream); //按字符读取数据,一次只能读取一个字节的数据

返回值:读取到的那个字符的ASCII码值

失败 -1

int fputc(int c, FILE *stream); //把c这个字符写入到stream表示的文件中

char *gets(char *s); //只能读取键盘输入的字符串,把字符串保存到s中

int puts(const char *s) //把s这个字符串在标准输出上打印出来
6.判断是否到达文件末尾

int feof(FILE *stream);

返回值: 1 表示达到文件末尾

7.sprintf和sscanf()

int sprintf(char *str, const char *format, ...);//字符串拼接

参数:str,拼接之后的字符串

int sscanf(const char *str, const char *format, ...); //字符串拆分

参数:str,要拆分的字符串
fprintf和fscanf()

int fprintf(FILE *stream, const char *format, ...);//按指定格式,字符串拼接之后写入文件

int fscanf(FILE *stream, const char *format, ...);//按指定格式,从文件里读取字符串然后拆分存入
8.主动刷新缓冲区

先写入缓冲区,

1)当缓冲区满了或者刷新缓冲区(遇到\0)时,才从缓冲区中读出

2)当主函数return退出时,也会刷新

int fflush(FILE *stream)//自动刷新缓冲区
目录操作
===============

1.相关的接口函数

(1)打开目录

#include

DIR *opendir(const char *name);

返回值: 成功 返回DIR指针表示你打开的那个目录
          失败 NULL

参数:name->目录路径名

(2)读取目录(重点)

struct dirent *readdir(DIR *dirp);->opendir的返回值

返回值:成功->struct dirent {

ino_t

d_ino;

/* 节点编号 */

off_t

d_off;

/* 文件偏移位置 */

unsigned short d_reclen;

/* 记录大小 */

unsigned char d_type; https://t.cn/R2WxELY

#粤嵌科技停课不停学 #粤嵌星计划 day07
今日笔记:
1.怎么从中间开始读写文件?(文件读写偏移)
设置文件的读写偏移
off_t lseek(int fd,off_t offset,int whence);

返回值:成功,目前偏移量距离起始位置的字节数

失败,-1

参数:fd :文件描述符

offset:偏移多少个字节

whence:SEEK_SET //起始位置

SEEK_CUR//当前位置

SEEK_END //末尾位置


用lseek求文件大小

int size=lseek(fd,0,SEEK_END);

int ret2=lseek(fd,5,SEEK_SET);//起始往后5
目前偏移量为:5,读取的内容:world!china No.1

int ret2=lseek(fd,-5,SEEK_SET);(失败了)//起始往前5
目前偏移量为:-1,读取的内容:

int ret2=lseek(fd,5,SEEK_CUR);//当前位置往后5
目前偏移量为:26,读取的内容:

int ret2=lseek(fd,-5,SEEK_CUR);//当前位置往后5
目前偏移量为:16,读取的内容: No.1

int ret2=lseek(fd,5,SEEK_END);//末尾位置往前5
目前偏移量为:30,读取的内容:

int ret2=lseek(fd,-5,SEEK_END);//末尾位置往后5
目前偏移量为:20,读取的内容:1
往前偏移不了就不动。还在原来位置。

2.获取文件的属性信息

#include

int stat(const char *pathname,struct stat *statbuf);

返回值:成功 0 失败 -1

参数:pathname,文件路径名

statbuf,存放信息

常用:st_size->文件大小

st_mode->文件类型(7种)

st_mode&S_IFMT

文件权限信息(r w x)

if(st_mode&S_IRUSR)//当前用户可读的

S_IRWXU

//当前用户

S_IRWXG //同组用户

S_IRWXO //其它用户

S_IRUSR

//同组用户,其它用户只是单词缩写不一样

S_IWUSR

S_IXUSR
3.修改文件权限

int chmod(const char *pathname,mode_t mode);

返回值:

参数:pathname,文件路径名

mode,权限0777 0654
4.分析函数出错的原因

void perror(const char *s);//会自动分析出错原因

系统定义了一个全局变量errno记录错误原因

原理:linux把所有的错误定义成宏,perror依据全局变量errno中的数字编号,查询宏定义,分析错误原因
进一步判断:
if(errno==错误编码/名称)//然后根据错误再处理 https://t.cn/ReN5aUi


发布     👍 0 举报 写留言 🖊   
✋热门推荐
  • 慈善就在身边,就在眼前,就在一转念间,就在举手投足中,慈善不应该是富人良心发现时的施舍和恩赐,而应该是每个人从内心深处发出的对他人的同情与关爱。 慈善不应该是富
  • 邓传凤在单位同时还担负着120的值班任务,经常需要值夜班,夫妻二人工作繁忙,便将 10岁的女儿送回外婆家,委托两位老人帮忙照看,“我们告诉女儿,现在是特殊时期,
  • 放个置顶=巫马/红一般路过疲惫社畜,自闭型同人女,不混圈不吵架(除非骂策划)有饭就吃,爬坑很快✨首页:日常吐槽➕娃片➕游戏➕转发美图✨游戏:阴阳师(1800+咸
  • MEOWXIANG Christmas Packaging 缪香 聖誕禮盒-在短短時間內,探測到遙遠銀河星系發出的訊號。 以此迴向,願求著如願,願苦著得樂,願這
  • #张元英[超话]##张元英GodBaby##张元英泪痣美神# 220213 IVE官推更新元英相关1p#ALIVEA RAY OF SUNSHINE ☀️——
  • 相者审度,颜色顿异,大言曰:‘此必有阴徳及物,此后前途万里,非某所知也。时寺门始开,俄睹向者素衣疾趋而至,逡巡抚膺,惋叹若有非橫。
  • 会做饭、体贴又在生病时细心照顾我的老公去哪找[泪]我本人现实中做菜的手艺也是黑暗料理那一挂的,除了妈妈没人愿意吃的那种(我自己吃着也很怪就是[允悲])第一次看到
  • 我的生活是一片泥沼,他是我黑暗中能遥望的一道光,俊哲是心里最后的一点甜,只要我还活着就不能放手。生日如果真的能实现什么愿望都话,唯有希望我的小疯子能清清白白的回
  • <Blu-ray BOX仕様>2022年 日本16:9[1080i Hi-Def]カラー / 約240分 / 1層 / 3枚組音声:日本語リニアPCM2.0ch
  • (一本正经的建筑学官腔……康泰生物交流纪要2021/05/31主题:小范围交流时间地点: 2021/05/12 出席人员:康泰生物证券投资中心整体介绍:四联苗:
  • ✨人生没有白走的路,每一步都算数✨生活,就是油盐酱醋,再加一点糖gσσ∂ мσяиιиgꔛ‬ꕤ❞☀️۹(⍥)要努力呀,为了想要的生活♡为了人间的烟火,为了今天的
  • 其中,Nadech排名年度男主角第一位,Yaya排名年度女主角第二位[心]cr E-Saan Poll100家中国公司将在沙特阿拉伯进行私有化项目#外贸# 沙特
  • 票房早餐一一为你奉上,更多影娱简讯信息请戳长图~~每天10点准时为你上新哦[互粉][跪了][围观][话筒]【新闻动态】合伙人股权设计与股权激励培训会 9月26日
  • 信息内容: 食尚玩家 绝美旅宿&餐厅 100 选明山庄地址:高雄市大树区三和里三和路120-1号#从住宿开始体验台湾# 位在高雄郊区,明山庄以自然、人文
  • 着力打造生态修复治理新样板在今年的春季绿化造林行动中,一株株适合当地生存的小树苗被栽植到兰州新区北部,一片约2000亩的林地初现雏形,这也标志着改善生态环境、造
  • 除了是一位文学家之外,苏轼还是著名的美食家(中国历史上有66道菜与他有关)、教育家(培养出海南历史上第一位举人)、工程师(杭州西湖留下了苏堤)。#ATEEZ[超
  • 不久之后 期待吧~哈哈再次祝你生日快乐~!明后天也多吃点好吃的今天也辛苦了~❤️快洗洗睡吧!宇航员们,不要忘记给个人博➕呦~狐友:小招新公益:周柯宇@INTO1
  • 佛法無量,既覺行無量,無圓無不圓,無滿無不滿,亦無是名究竟圓滿!不落恶果者有信无证,住因住果、住念住心,如是生灭。
  • 老妈说,解决了蔬菜荒之后,后面几次都发的荤菜和日用品,百姓称颂,实用实惠。孙来春表示,有那么多医护人员以及社区工作者、志愿者投身到抗疫一线,为大家筑起一道道防线
  • 感性的男人在不断失望的过程中,爱意被磨灭得差不多了,感情再也无法支撑你们的关系,也没有理由再继续,于是分手;而理性的男人就算还爱,但他心里清楚爱你也没用,反正最