文章目录 2.嵌入式 3.目录结构 4.Linux命令 5.直入主题:结构实在是太困了,明天再写 7:IO7.1 7.2 文件相关概念: 7.3 和FILE指针 7.4 前言
刚开始学习嵌入式人工智能,基于Linux的C语言课程。
零。 (这是我第一次发博客,难免有错误,希望大家指正。本文内容都是老师在课堂上讲授的,至于没有写到的地方,老师没有提及,以后工作中可能会更新和遗漏。) 1.编程环境介绍虚拟机
虚拟机是在我们的计算机上虚拟化的一台PC。
为什么要安装虚拟机
学习C语言的方法有很多种,当然编译环境也有很多种。 刚接触C语言时,使用的是DEV C++和VS环境。 这两个软件操作方便,不需要记住很多命令,调试也方便,但是都是安装在系统上的。 学习Linux就需要使用它,所以需要在上面安装一个虚拟机来模拟Linux操作系统。
常用的Linux系统
常用的Linux操作系统有:小红帽()、、、等。我使用的系统
2.嵌入解释解释一下什么叫td嵌入
基于计算机技术,软件和硬件都可以量身定制。 所谓软硬件可量身定制就是:用软件来控制硬件,根据不同的需求实现不同的功能,这就叫量身定制。简而言之:根据用户对产品的需求进行定制,就叫量身定制
剪下
裁剪分为两部分,一是软件裁剪:实现。二是硬件裁剪:硬件模块电路的搭建
3、目录结构
目录结构:像一棵倒立的树,根在上面,枝条越往下走
目录结构:像森林一样
Linux系统下一切皆文件
Linux系统下的目录分布:
根目录(/):Linux文件系统的顶级目录,所有东西都在它下面,也是从它开始
主目录(~或主目录或工作目录或HOME):工作目录
注意:
1、普通用户没有权限操作主目录以上的目录。 如果要操作,在命令前面加上sudo
2、HOME是主目录,但是home不是主目录,而是我们的主目录在home目录下,也就是主目录
4.Linux命令5.
。 。 .等我有空的时候再补上
开门见山:结构概念
结构体是一种自定义数据类型,是一类事物相关属性的集合
定义
struct 结构体名 { 属性1; 属性2; ... 属性n; }; //花括号最后一定加分号;
例如,如果要统计学生的姓名、年龄和身高,可以定义一个结构体来存储这三个变量:
struct person //定义了一个结构体,它的数据类型为:struct person { char name[30]; //字符串数组:存放姓名 int height; //整形变量来存放身高数据 }; //结尾要加分号
结构初始化
通过 int a = 5; (数据类型:int 变量名:a)
可以看出:结构体名变量名={...};
其中(结构名称)是数据类型,
例如 = { "刘雅琼", 168}; // 数据类型为变量名 // 结构体中第一个属性是name,属于字符串数组,所以值为“...”,第二个是int类型,所以值为一个数字
访问方式一:通过结构体变量访问成员
#includestruct person { char name[30]; int height; }; int main(void) { struct person student = {"liu ya qiong" , 168}; //定义一个变量student,数据类型为struct person printf("%Sn" , student.name); //通过结构体变量访问成员 printf("%dn" , student.height); //同上 return 0; }
方法二:通过结构体指针访问成员
指针变量名->成员;
//定义一个整型指针
数据类型指针变量名;
int *p = NULL;
*pp = NULL;
#includestruct person //定义一个学生信息结构体 { char name[30]; //姓名 int height; //英语 }; void Input(struct person *p) //输入函数,定义一个struct person 类型的结构体指针p { printf("请输入:姓名,身高n"); scanf("%s %d" , p->name , &p->height); //%s,输入的是字符串数组,所以不用取地址,后面的身高成绩需要取地址 //printf("%s %d",p->name,p->height);输入函数测试代码 } void Output(struct person *p) //输出函数,同上 { printf("姓名:%s " , p->name ); printf("身高:%d " , p->height); } int main(void) //主函数 { struct person student = {0}; //初始化全为0 Input(&student); //将student这个结构体的地址传给输入函数 Output(&student); //将student结构体的地址传给输出函数 return 0; }
运行结果:
太困了,明天写更新,参见另一篇文章:六:模块化编程
模块化编程
七:IO 7.1 I:输入——— O:
顾名思义:输入和输出
我们学到的输入是:scanf()、gtes()
输出为:()、puts()
从规范上来说:输入是将数据写入内存,输出是将数据从内存读取到文件。 换句话说:输入是将数据从键盘输入到内存中,输出是将数据从内存输出到终端。
##7.1 IO的分类
IO分为两类,一类是标准IO,一类是文件IO。
标准IO:按照C语言标准进行输入输出的一系列函数,由ANSI C标准的标准I/O库规定:由美国国家协会(ANSI)和国际标准组织制定。
标准输入/输出:
1 可以跨平台,可以在Linux下使用,也可以在Linux下使用
标准io通过缓冲机制减少系统调用,达到更高的效率
文件流指针:通过结构体进行操作
特征
(1) 有缓冲区 (2) 由 FILE* 操作
7.2 文档相关概念:
文件:相关数据(视频、图像)的有序集合
文件名:该数据集的名称
7.2.1 文件类型:
1. 普通文件——
(1) ASCII文件(文本文件)
(2) 二进制文件(视频、图片)
2.目录文件d
3.链接文件l
4.字符设备文件c
5.块设备文件b
6. 管道文件p
7.文件
7.2.2 相关函数:
系统调用:操作系统向应用程序提供的接口(函数)
:操作系统调用:调用函数来调用操作系统提供的函数
读文件:一次性读入大量内容到缓冲区中,然后我们的应用程序只需要从缓冲区中读取数据即可
写文件:一次性将内容写入缓冲区,然后调用系统调用写入文件
7.3 流和文件指针
FILE指针:每个使用过的文件在内存中开辟一块区域来存储该文件的相关信息。 这些信息存储在一个结构体类型的变量中,该变量由系统定义,命名为FILE。
7.3.1 流
只要文件打开了就会有缓冲区,有缓冲区就会有流:字节进出(内存和缓存之间的字节)
注意:只有标准io才有流的概念
注意:标准I/O库的所有操作都是围绕()进行的。 在标准 I/O 中,流由 FILE * 描述。
编号 2001
文本流:'2''0''0''1'
二进制流:00001
7.4 缓冲区
所谓缓冲区。 顾名思义,它充当缓冲区,可以暂时存储一些数据。 举个栗子:如果我在上下了一个PCB项目的订单,板子正在加工中,现在需要采购带有BOM的元件,比如电阻、电容、二极管、LED等,那么你是一一下单的吗? 或者在某宝的购物车里下单? 当然,如果没有购物车功能,我们只能一项一项下单,一遍遍输入支付密码,确认订单。 但现在它有了购物车的功能,我们只需要将需要的组件全部添加到购物车中,一次性结账即可。 这将大大减少我们大脑的使用。 ------
缓冲区就是我们的购物车。 当我们需要打印10句hello时,我们不需要每次都调用cpu来输出hello。 我们只需要把要打印的5个hello放入缓冲区,CPU一次处理就可以完成5句话的打印。
缓冲机制的作用:减少系统调用次数
7.4.1 缓存分类:(1)全缓存
当缓冲区满时,程序运行结束,强制刷新缓冲区,则缓冲区会被刷新
(2)行缓存
当缓冲区满时,程序结束,强制刷新缓冲区,遇到换行符时刷新缓冲区
(3)无缓存
程序运行时默认打开三个文件,标准输入、标准输出、标准错误。 对应的流指针有:stdin, ,