- 博客(30)
- 收藏
- 关注
原创 单向链表以及环链表
(3)如何计算环入口位置:将一个指针从第一个节点向后走,将一个指针从相遇点向后走,两个指针相遇的位置即为环入口的位置。(2)如何计算环长:标记相遇的位置,让指针继续向后走,没走一步计算器自加,走回到标记位置,则计算器值即为环长。(1)是否有环:快指针每次走2步,慢指针每次走1步,快慢指针相遇则说明有环。最后还有一个环链表:如何判断一个链表是否有环?类似暂定一个最小的 后面找到最小则和前面互换 循环比较。二、找到链表倒数第k个节点。一、找到中间节点位置。
2024-08-28 20:41:51
301
原创 SQL部分一
关系型数据库:Oracle(DB2)、MySQL(开源)、SQLserver、sqlite(小型数据库)文件:存放数据,掉电数据不会丢失,软件的配置及想要持续保存的数据放入文件中。(3)语言:数据库支持的编程语言,主要对表完成:增、删、改、查相关功能。注意:在LINux中除了汉字是中文以外,其余符号及字符均为英文状态下;callback函数:(参数可以改变,按照主函数具体操作)主要了解的是小型数据库(sqlite)大批量数据存储和管理时使用数据库。非关系型数据库:Redis。(3)sqlite3编程。
2024-08-22 22:03:01
286
原创 嵌入式第三十六天
(3)select 和 poll 每次被调用时都会把描述符集合从用户态拷贝到内核态,而 epoll 在调用 epoll_ctl 时会拷贝进内核并保存,之后每次 epoll_wait 时不会拷贝。select和poll只能通知有fd已经就绪了,但不能知道究竟是哪个fd就绪,所以需要主动轮询一遍找到就绪的fd。2.select监听的文件描述符集合在应用层,内核层监听事件后需要传递给用户层带来资源开销。(1)select和poll一样需要遍历 epoll则采取回调的方式;多路复用 select。
2024-08-21 19:11:27
340
原创 TCP、UDP、HTTP
select:监听文件描述符集合,将所有要监听的事件加入集合中,使用select监听所有事件,当集合中有事件发生, select不再阻塞,同时select会将产生事件的文件描述符留在集合中,而把没有产生事件的文件描述符从集合中踢出,所以留在集合中的文件描述即为产生事件的文件描述符,对其处理即可。(2)包头组成(源端口号,目的端口,序列号,确认号,校验和,标志位,滑动窗口大小,紧急指针等)确认号:接收到数据的编号(只有当ACK为1时,该位有效)、确认号即想要让对方下次发送数据的序号。UDP不安全、不可靠。
2024-08-20 18:21:09
516
原创 嵌入式第三十一天
子网掩码展开成二进制,1对应的部分就是IP地址的网络位,0对应的部分就是IP地址的主机位。子网掩码:每个IP地址都会搭配一个子网掩码,用来区分IP地址的网络位及主机位。四次挥手断开连接,确保数据传输的完整。网络位:IP地址所属的网段(局域网的编号)FTP 文件传输协议。广播号:网络位不变, 主机位全为1。IP地址 = 网络位 + 主机位。网段号:网络位不变,主机位全为0。TFTP 简单文件传输协议。SMTP 简单邮件传输协议。TELNET 网络终端登录协议。
2024-08-15 21:24:27
329
原创 嵌入式第三十天
ipcrm -q/m/s 消息队列ID/共享内存ID/信号灯ID。(1)ipcs:查看所有ipc对象的信息。IPC对象(内存文件)
2024-08-14 19:00:08
192
原创 信号以及定时器
SIGCHLD:表示该进程有一个子进程结束了。SIGUSR1:用户可以使用该信号实现通信。SIGSEGV:表示内核操作内存错误。SIGKILL 进程结束。SIGSTOP 进程挂起。SIGPIPE:表示管道破裂。SIGIO:表示IO事件发生。信号:内核层和用户层通信的一种方式。信号有60种类型,有以下几种特信号。(2)9号和19号信号。(1)可以从终端输入。四、定时器和KILL。
2024-08-11 21:06:34
238
原创 嵌入式第二十六天
需要先播放视频:mplayer -slave -input file=/tmp/myfifo 视频路径。Linux进程间通信的方式:管道、信号 ,消息队列、共享内存、信号灯,套接字。三、通过管道控制视频。
2024-08-09 19:20:44
227
原创 线程、锁和信号量
原子操作:最小的一次CPU操作,在执行原子操作时不会切换调度任务。互斥锁不能同步,多个任务依然保持异步执行,但是可以解决资源竞争。
2024-08-08 18:21:49
274
原创 进程和线程的区别
fork 创建进程空间 创建线程 pthread_create。exit 退出进程 退出线程 pthread_exit。wait 回收进程空间 回收线程 pthread_join。v:参数以指针数组形式传递。p:在系统目录下查找文件。l:参数以列表形式传递。三、线程相关的函数接口。(1)exec函数族。四、进程和线程的区别。
2024-08-07 18:11:36
250
原创 进程是什么
wait具有阻塞功能,如果子进程先结束,wait会不阻塞直接回收,如果子进程没结束,wait会阻塞直到子进程结束回收子进程空间。两个进程所占虚拟内存空间并不是 8 G,而是 4 G,两个进程分时共用同一空间。WTERMSIG(wstatus):获取子进程被信号打断结束的状态码。进程:是一个程序动态执行的过程,包括进程的创建、调度和消亡的过程。两个进程物理内存空间是独立的,进程1和进程2空间独立。程序:保存在磁盘空间中的的一段代码的集合,死的。结论:进程空间是独立的,但是两个进程并不是8G;
2024-08-06 18:17:49
253
原创 嵌入式第二十天
软连接文件名 -> inode -> 数据块 -> 链接向的文件名 -> inode -> 数据块。ln -s 要链接向的文件名 软链接文件名。普通文件:文件名 -> inode -> 数据块。通过在磁盘中存放的inode节点进行链接。文件分类: b,c,d,-,l,s,p;In 要链接的文件名 硬链接文件名。a: 通过文件名进行链接。五、stat和lstat。(1)软链接:符号链接。删除文件链接关系断开。
2024-08-02 18:34:07
166
原创 嵌入式第十九天
7.文件IO可以操作设备文件、进程间通信的文件、普通文件(Linux系统下的一切文件均可以使用文件IO)O_CREAT 文件不存在创建。O_TRUNC 文件存在清0。O_EXCL 文件存在报错。O_ASYNC 异步IO。系统调用:是Linux内核中的函数接口,只能在Linux系统中使用。必须包含:O_RDONLY、O_WRONLY、O_RDWR 三个其中之一。3.标准IO是针对于文件IO的封装。(4)标准IO和文件IO的共同作用函数。
2024-08-01 19:07:43
1019
原创 嵌入式第十八天
ASCII码文件: '2' '0' '2' '4' 代码、文本文件。二进制文件: 2024 视频、图片、压缩包等。fgets不会去掉用户输入的\n字符 (而且两者的传输速率也不相同fputs较快)gets会去掉用户输入\n字符。puts会多打印一个\n字符。一、补充(标准IO端口命令)(1)fputs和fgets。
2024-07-31 18:31:09
310
原创 嵌入式第十七天
Linux内核:Linux操作系统的核心代码,包括对CPU管理、硬件设备管理、内存管理、文件系统管理、进程调度管理等。w 只写 如果文件存在则清0,只写打开 如果文件不存在则创建。a 追加只写 如果文件存在则追加只写打开 如果文件不存在则创建。a+ 追加读写 如果文件存在则追加读写打开 如果文件不存在则创建。puts、putchar、printf是基于stdout实现的。(3)fgetc和fputc的等价。
2024-07-30 19:06:02
419
原创 嵌入式第十五天
4.单向链表、双向链表、内核链表、循环链表。1.数组是有限个元素的集合。3.数组的插入和删除效率低。2.链表元素个数没有上限。2.数组的空间必须连续。1.链表空间不需要连续。5.插入和删除效率很高。3.链表存储空间变大。
2024-07-28 19:53:34
232
原创 嵌入式第十四天
> 右移 让数据缩小 num /= 2 ^ n。^ 按位异或 相同为0 相异为1。算数 > 移位 > 关系 > 位运算 > 逻辑。2.大端:内存低地址存放高数据位称为内存大端。括号 > 单目 > 双目 > 三目 > 赋值 > 逗号。(1)注意: & 0得0 | 1置1。1.小端:内存低地址存放低数据位称为内存小端。(2)不改变其余位的前提下,让第n位置0。| 按位或。~ 按位取反。& 按位与。
2024-07-26 20:24:27
247
原创 嵌入式第十三天
1.char *、int *、double * 转换为void *时需要强制类型转换。2.void *转换为char *、int *、double *时不需要强制类型转换。(2)主函数的构造—————结构体成员访问。(1)void *指针需要注意。(1)封装函数 构造数据链。
2024-07-25 19:50:11
209
原创 嵌入式第十二天
2.数组指针取*操作:值不变,类型降级成为指向数组第一个元素的指针。(1) 一维数组中数组的数组名是指向数组第一个元素的指针。注意:可以把a理解为int *型 但是以下两种情况不可以。3.数组指针变量量为整个数组大小。1.对一维数组&得到数组指针。1、sizeof运算时。(3)二维数组和指针的关系。一、指针数组和数组指针。
2024-07-24 19:35:43
280
原创 嵌入式第十一天
const == readonly 只读(只能读不能改)四、字符型数组和字符串作为函数参数。三、一维字符型数组和指针的关系。二、一维数组作为函数参数。一、数组与指针的关系。
2024-07-23 18:36:42
210
原创 嵌入式第十天
对*p赋值:不会修改指针变量的指向,只是利用指针修改其指向空间中的值。--:向内存低地址偏移指向数据类型大小个字节空间。p - q:两个地址中间相差多少个对应数据类型的数据。(1):在指针运算符中 &和*同时出现可以抵消掉。(3)*运算符 :就是不同类型的数据的不同字节空间。++:向内存高地址偏移指向数据类型大小个字节空间。(*p)++:等价于*p再(*p)++*p++ :等价于*p再 p++;对p赋值:改变指针变量的指向。(4)p和*p的赋值。
2024-07-22 19:46:42
242
原创 嵌入式第九天
今天学习了函数的使用,主要还是函数的调用,在使用中要注意定义的变量是哪种形式,主函数和调用函数之间的联系。2.头文件中存放声明的全局变量和全局函数。3.头文件中存放自定义的数据类型。1.头文件中存放宏定义。(2)项目工程根据功能划分成不同的文件。
2024-07-20 20:28:21
149
原创 嵌入式第六天
今天主要学习了数组,在LINux中还是需要C语言的应用。数组的使用中,对于需要定义数组的初始化,在使用数组时,需要特别注意数组的边界问题。由于数组的下标是从0开始的,因此在访问数组元素时要确保不要超出数组的边界范围,否则会导致程序出现错误。接下来才能对数组进行一系列的输出。学会如何在实际编程中使用数组。通过编写程序,更深入地理解数组的用法和技巧。例如,我们可以使用数组来存储一组数据,并对这组数据进行排序、查找等操作,冒泡排序需要注意循环次数。一、补充循环结构中的剩余部分。
2024-07-17 19:08:52
245
原创 嵌入式第五天
穷举法的使用需要注意所需要的变量之间的关系,注意正确使用。在使用循环结构的时候要注意不能混淆,丢失必要的程序。同一个算法可以用不同方法的代替。一、继续补充分支结构。
2024-07-16 19:17:27
214
原创 嵌入式第三天
首先补充昨天学的变量:一、表达式(1)表达式一定要有值和类型。(2)混合类型(显示类型和隐式类型转换)需要注意:低精度转换高精度时1.同种类型所占空间越大精度范围越高 long>int>short>char2.整数类型中无符号类型精度大于有符号类型精度 unsigned>signed3.浮点数类型精度高于整数类型精度 double>float>整数类型4.shortcharint进行数据运算
2024-07-13 18:34:54
200
原创 嵌入式第二天
3.字符类型(unsigned char 无符号字符型, char 有符号字符型 )1.常见常量(整形常量,浮点型常量,字符常量,字符串常量和标识常量)主要有基本数据类型和构造数据类型(结构体、共用体、枚举类型)2.浮点数类型(float 单精度,double 双精度)今天主要学习了基本数据类型 运算符和相关的表达式。2.变量:在程序运行过程中值可以发生改变的量。1.整数类型 (在内存空间所占字节数)
2024-07-12 18:23:29
230
原创 嵌入式第一天
以上就是第一天的学习,简单也好上手,头一次体会培训机构的氛围,因为我自学能力还是可以的,所以觉得讲的内容都很基础,希望后面的内容能给我带来不一样的感觉,总的来说头几天讲的内容还比较基础,因为我们在校学过,所以觉得还是蛮简单的,工程师讲的也细,有问题也能及时给你解答。普通用户root(可以有多个,也可以一个没有,用户名没有限制,但是不能和root重名)这一步很简单,有老师帮忙安装,之前在学校用过,所以很好上手。~:当前所在的目录的路径。(2)mkdir和rmdir。创建目录文件和删除目录文件。
2024-07-11 18:23:55
376
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅