资讯详情

LinuxC学习日记

文章目录

  • 前言
  • 学习是无耻的!
  • 面子值几块钱,不懂就问别人。基于嵌入式人工智能,我开始学习。LinuxC语言课程。
  • 零(第一次发博客难免会有错误。希望大家能不遗余力的纠正。这篇文章的内容都是老师在课堂上讲的。至于没写的,老师没说,以后可能会更新缺失。
  • 一、编程环境介绍
    • 虚拟机
    • 为什么要安装虚拟机?
    • 常用的Linux系统
  • 二、嵌入式
    • 解释什么t*d叫t*d嵌入式
    • 裁剪
  • 三、目录结构
  • 四、Linux命令
      • 创建:
      • 删除:
      • 创建文件夹:
      • 删除文件夹:
      • 清空屏幕:
      • 拷贝文件:
      • 复制文件夹:
      • 移动文件/文件夹:
      • vim与gedit编辑器
        • 光标移动:
        • 搜索和替换需要切换到低行模式
        • 替换:
        • 删除、复制和粘贴
        • 保存,离开命令
  • 五、gcc编译
  • 六、 计算机组成原理
    • 1.计算机的基本结构
  • 直奔主题 : 结构体
    • 概念
    • 定义
    • 结构的初始化
    • 访问
      • 方法1:通过结构变量访问成员
      • 方法二:通过结构体指针访问成员
  • 我太困了,明天再写吧
    • 更新,见另一篇文章:六:模块化编程
  • 七:IO
  • 7.1
    • I: input ———— O: output
  • 7.2 文件相关概念:
    • 7.2.1 文件类型:
    • 7.2.2相关函数:
  • 7.3 流和FILE指针
    • 7.3.1 流
  • 7.4缓冲区
    • 7.4.1 缓存分类:
      • (1)全缓存
      • (2)行缓存
      • (3)不缓存


前言

学习是无耻的!

面子值几块钱,不懂就问别人。基于嵌入式人工智能,我开始学习。LinuxC语言课程。


零(第一次发博客难免会有错误。希望大家能不遗余力的纠正。这篇文章的内容都是老师在课堂上讲的。至于没写的,老师没说,以后可能会更新缺失。

一、编程环境介绍

虚拟机

虚拟机是我们电脑上虚拟的PC机。

为什么要安装虚拟机?

c学习语言的方法有很多,编译环境也有很多。刚接触C语言的时候用过。DEV C 、VS环境,这两个软件操作方便,不需要记住很多命令,调试方便,但都安装在Windows系统的Linux就需要用LinuxOS,所以需要在Windows上面装虚拟机来模拟Linux操作系统。

常用的Linux系统

常用的Linux操作系统有:小红帽(RedHat)、Debian、Ubuntu等等。我用的Debian系统

二、嵌入式

解释什么td叫td嵌入式

基于计算机技术,软硬件可以切割。所谓软硬件切割,就是用软件控制硬件,根据不同的需要实现不同的功能,这叫切割。简而言之,根据用户对产品的需求定制被称为切割

裁剪

切割分为两大块,一是软件切割:LinuxOS实现它。二是硬件切割:构建硬件模块电路

三、目录结构

LinuxOS目录结构:像倒立的树,根在顶部,越往下分叉越多 WindowsOS目录结构:像森林 在这里插入图片描述 Linux目录分布在系统下: (/):Linux文件系统的顶层目录,一切都在它下面,从它开始 (~ or 主目录 or 工作目录 or HOME):工作目录 注意: 1、 普通用户无权操作家居目录以上的目录。如果他们想操作,他们将在命令的前面添加sudo 2、 HOME是家目录,还有home不是家目录,而是我们的家目录在home目录之下,huangxiaoyang才是家目录

四、Linux命令

内部可以省略 [选项]:功能 [参数]:操作对象:操作对象 三个参数应该用空间隔开

打开终端:Terminal 自动补全键:Tab 清屏:ctrl l 上下箭头:可查看历史命令

命令提示符:huangxiaoyang@kali 用户名@主机名 :当前路径$ :分隔符 :普通用户 : 超级用户 绝对路径:从根目录开始的路径 :显示当前目录的绝对路径 :显示当前路径下的内容 蓝色:文件夹(目录) 白色:文件 绿色:可执行文件 :显示当前路径下的所有内容,包括隐藏文件 :显示党项路径的详细信息(读写权限、用户名、文件大小、创建时间)

举个栗子: ls 路径:显示当前路径下的内容

ls day10。 从当前路径下找一个叫做day10目录,然后显示目录下的内容 ls -a:显示所有文件,包括隐藏文件 ls -l:文件的详细信息 ls在显示文件夹中的所有文件后,如果有文件夹,可以继续使用,进入子文件夹: )意思是切换目录. :进入文件夹 返回上层目录 现有A目录,通过ls命令中有三个文件,我们的目的是打开E目录,所以我们需要执行一次cd B只有进入B目录,才能进入B目录 ,然后获取E目录文件。 我们已经知道蓝色是文件夹,绿色是可执行的问价,白色是文件,那么如何创建它们呢?

创建:

:既可以新建单个文件,也可以同时新建多个文件,中间需要用逗号分开当前路径下创建的文件 :既可以新建单个文件,也可以同时新建多个文件,中间可以用逗号分开创建的文件可以在当前路径或其他路径下‘. .’ 代表上层路径 举个栗子:假设目前我们处于B目录内 执行后就会在当前路径也就是B目录内创建一个day1的文件夹。 执行后就会在当前目录的上级目录也就是A目录内创建一个名为day1的文件夹。

这里还用上面的目录图示,我们进入E_dir目录,然后,然后还在该目录下执行,看一下结果如何:

删除:

:删除文件,可同时删除多个(中间用空格隔开) :既可删除本路径下的文件,也可删除其他路径下的文件

创建文件夹:

:创建文件夹,可同时创建多个文件夹(中间用空格隔开) :同上

删除文件夹:

:只能删除空文件夹,非空无法删除 :删除文件夹,包含非空文件夹

清空屏幕:

  1. 命令:输入clear回车
  2. :快捷键

拷贝文件:

拷贝文件夹:

移动文件/文件夹:

mv命令的第二个作用是文件/文件夹改名:

vim与gedit编辑器

vim 文件名<=>vi 文件名 : 如果文件存在,就直接打开并进行编辑;如果文件不存在,则创建并打开,再进行编辑 创建并打开: 命令等后面用到再讲!

附上常用命令: Linux分为三种模式状态,分别是 三者的关系图: 【我笔记上的字很丑,见谅】

光标移动:

     方向键:
     向下移动多行:向下移动30行 30
     屏幕向下翻动一页 ctrl+f
     屏幕向上翻动一页 ctrl+b
     功能键home 光标移到一行最前面
     功能键end  光标移到一行最后面
     G 移动这个文件的最后一行
     nG 移动这个文件第n行
     gg 移动文件第一行
     N [enter] 光标向下移动n行

查找与替换【需切换到低行模式】

 /word  向下搜索一个名为word字符串

替换:

:n1,n2s/word1/word2/g n1和n2行之间world1这个字符串替换为world2 :n1,$s/ word1/word2/g n1行到最后一行之间world1替换为world2

删除、复制与粘贴

   dd:删除光标所在一整行
   ndd:删除光标所在的向下n行  20dd  删除20行
   yy:复制光标所在一行
  nyy:复制光标所在的向下n行。 20yy
  p:将已复制的数据在光标下一行粘贴
  u:复原前一个操纵
  ctrl+r:重复上一个操作

保存、离开命令

  :w  保存数据到硬盘
  :q 退出
  :q! 强制退出
  :wq 保存后离开
  :w 文件名  将编辑的文件保存成另一个文件
  :set nu 显示行号
  :set nonu 取消行号

五、gcc编译

到这一步,只能说你一只脚踏入了Linux的大门,因为接下来我们要开始写程序了。还是拿我们刚创建的hello.c举例吧: 程序包括什么呢?有些同学就说:程序=数据结构+算法。不错,但是有些宏观了,就拿一个hello world举例,它包括:头文件、主函数、返回值。 主函数有三种形式:

//1.无返回值的main函数
void main(void)
{ 
        
	函数体;
}
//2.main函数不带参数
int main(void)
{ 
        
	函数体;
	return 0;
}
//3.main函数传参
int main(int argc , char *argv[])
{ 
        
	函数体;
	return 0;
}

我们就不打印hello world了,打印中文吧!

//头文件#include<stdio.h>
#include<stdio.h>

int main()
{ 
        
	printf("哈喽 沃德!\n");
	return 0;
}

编译运行:

  1. gcc hello.c 生成可执行文件a.out
  2. gcc hello.c -o hello 生成可执行文件hello 第二种就是自定义可执行文件的名字

点,斜杠,再加上可执行文件名 【./a.out】or【./hello】

六、 计算机组成原理

1.计算机的基本结构

CPU(中央处理器) 存储器 输入/输出 程序

直奔主题 : 结构体

概念

结构体是一种,是一类事物相关属性的集合

定义

struct 结构体名
{ 
        
	属性1;
	属性2;
	...
	属性n;
};		//花括号最后一定加分号;

比如要统计学生的姓名、年龄、身高,就可定义一个结构体用来存放这三个变量:

struct person		//定义了一个结构体,它的数据类型为:struct person
{ 
        
	char name[30];	//字符串数组:存放姓名
	int height;		//整形变量来存放身高数据
};					//结尾要加分号

结构体初始化

由 int a = 5;(数据类型 :int 变量名:a) 可知:struct 结构体名 变量名 = {……}; 其中(struct 结构体名)为数据类型, 例如struct person student = { "liu ya qiong" , 168}; //struct person 就是数据类型 student为变量名 //结构体里面第一个属性是name,属于字符串数组,所以赋值“……”,第二个为int型,所以赋值数字

访问

方式一:通过结构体变量访问成员

#include<stdio.h>

struct person
{ 
        
	char name[30];
	int height;
};

int main(void)
{ 
        
	struct person student = { 
        "liu ya qiong" , 168};	//定义一个变量student,数据类型为struct person
	printf("%S\n" , student.name);		//通过结构体变量访问成员
	printf("%d\n" , student.height);	//同上
	return 0;
}

方式二:通过结构体指针访问成员

指针变量名->成员; //定义一个整型指针 数据类型 指针变量名; int *p = NULL; struct person *pp = NULL;

#include<stdio.h>

struct 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: input ———— O: output

顾名思义:输入输出 我们学过的输入有:scanf()、gtes() 输出有:printf()、puts() 规范来讲:输入是把数据写入到内存,输出是从内存读取数据到文件。换言之:输入是从键盘将数据输入到内存中,输出是将数据从内春输出到终端。 ##7.1 IO的分类 IO分为两类,一类是标准IO、另一类是文件IO。 按照C语言标准的一系列用来进行输入和输出的函数,是由标准I/O库由ANSI C标准说明:由美国国家协会(ANSI)及国际化标准组织。

1 可以跨平台,既可以在Windows下使用,也可以在Linux下使用
(1)带缓冲区 (2)通过FILE*来操作

7.2 文件相关的概念:

文件:一组相关数据的有序集合(视频、图片) 文件名:这个数据集合的名称

7.2.1 文件类型:

1、普通文件 (1)ASCII文件(文本文件) (2)二进制文件(视频,图片) 2、目录文件 3、链接文件 4、字符设备文件 5、块设备文件 6、管道文件 7、套接字文件

7.2.2相关函数:

7.3 流和FILE指针

:每个被使用的文件都在内存中开辟一个区域,,这些信息是保存在一个结构体类型的变量中,

7.3.1 流

只要打开文件就会有,有缓冲区就会有流:字节的进进出出(内存和缓存之间的字节) 注意:只有标准io才有流的概念

注意:标准I/O库的所有操作都是围绕流(stream)来进行的,在标准I/O中,流用FILE *来描述。

数字2001 文本流:‘2’ ‘0’ ‘0’ ‘1’ 二进制流:00000111 11010001

7.4缓冲区

所谓缓冲区。顾名思义就是起到一个缓冲的作用,能够暂存一些数据, 假如我在立创PCB下单了一个PCB工程,板子正在加工,现在我需要拿着BOM表去采购元件,需要电阻、电容、二极管、乐ED等东西,那么你是一件一件的下单?还是放在某宝的购物车一块下单? 当然,若是没有购物车这个功能,我们只能一件一件去下单,一次次的输入付款密码,确认订单。不过现在它有购物车的功能,我们只需把所需的元件全部添加到购物车,一次结账即可。这样会极大的降低我们的大脑使用率。------ 就是我们的购物车,当我们需要打印10句hello时,不用去每次调用cpu输出hello,只需要将待打印的5个hello放入缓冲区,经由cpu一次处理即可完成5句话的打印。

7.4.1 缓存分类:

(1)全缓存

(2)行缓存

(3)不缓存

标签: 2001二极管gg电容屏

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台