- 博客(24)
- 收藏
- 关注
原创 网络编程相关概念
4.物理层 ARP(地址转换协议) RARP (逆向转换) ip--->mac。1.socket 套接字(用于网络的一种函数)//返回值为文件描述符。2.传输层 TCP(传输控制协议) UDP(用户数据报协议)IP地址的分类: A B C D E 四类。3.网络层 IP ICMP(ping)2.ip + port 地址 + 端口。IP地址 = 网络位 + 主机位。1.应用层 HTTP DNS。
2024-09-02 15:50:32
65
原创 进程间通信
pipe无名管道//亲缘关系进程才可以用 pipe。read最好读取二进制文件,fgets读取文本文件。fifo有名管道//任意进程 mkfifi。实现fd与fp的转换。echo $$ //返回终端的id号。kill://发信号到进程。
2024-08-27 09:01:35
99
原创 线程,互斥与同步
僵尸进程:要进行回收操作 //如果程序运行时间长要回收,短的话不回收。waitpid();//非阻塞回收(有可能失败,失败了稍后再试)pthread_join();//尽量不要直接用局部变量。互斥锁(对临界资源的排他性访问):互斥锁变量(内核对象)同步:有顺序的访问临界资源。**:表示改变指针的指向。变量可以共享,节省资源。*:表示改变指针的内容。pthread 线程。
2024-08-23 10:21:31
171
原创 进程与线程
2.批处理进程 shell脚本(一堆命令写在一个文件里,一行行执行命令)fork()&&fork()||fork() 考虑截断效应。进程的状态:就绪态->执行态->阻塞态(基本的操作系统)exit(0\1);//会刷新缓冲区,用于结束进程。//不刷新缓冲区,用于结束进程。top/根据CPU占用率查看进程的相关信息。getppid(获取父进程pid号)3.守护进程(杀毒软件、输入法等)pcb(进程控制块)是一个结构体。ps aux//查看进程相关信息。僵尸进程//子进程先消亡。孤儿进程//父进程先消亡。
2024-08-19 21:33:22
197
原创 linux目录操作
symlink 软链接 (快捷方式)truncate 减小文件的大小。Makefile://工程管理工具。link ln 硬链接。
2024-08-19 10:27:45
86
原创 文件io操作
/定位文件流指针,再偏移多少以确定文件流指针的位置。读取操作或者写入操作后,光标会移动到末尾位置,需要重新移动光标。文件io:一般是对设备文件操作,当然也可以对普通文件操作。//文件开头到文件流指针字符大小。3.文件描述符 很小的非负整数 0-1023。2.操作对象不是流,二十文件描述符。open打开 成功返回函数描述符。write写入 成功返回写入的个数。read读取 成功返回读取的个数。全缓冲 //主要用于文件的写。
2024-08-13 21:43:33
172
原创 linux文件操作
fgets和fputs不可以处理二进制文件,只能处理文本文件。fputc(写入的内容,要写入的文件地址);man手册在linux系统很重要。vimdiff:文本对照工具。//一个字符一个字符处理。
2024-08-12 21:32:21
71
原创 枚举的定义
算术右移:看符号位,看数据类型,如果是有符号类型的数据,右移时最高位补符号位,如果是无符号类型,右移时最高位补0。//此时a是int类型的一个别名 a b = 5;函数指针 指向函数类型的指针 //基类型是函数的指针。3.枚举类型的本质实际是一个int类型的数据。4.枚举类型的变量与整形类型的变量是通用的。a << n //将a这个数据左移n位置。a >> n //将a这个数据右移n位置。如果有给定的值,后续没有给值的依次加1。typedef//给类型起别名。或运算 |:一真则真 //置1。
2024-08-11 22:47:45
125
原创 结构体共用体
为成员运算符//表示 的。2.共用体里面赋值,默认最后一个为值赋给共用体,但是还看要最后一个值能影响几个字节。}//表示定义出一个数据类型,可以进行定义变量,定义指针变量,定义数组等操作。结构体变量的引用:一般是引用到具体的成员数据。结构体类型:用来描述复杂数据的一种数据类型。1.共用体初始化时,默认第一个值赋给共用体。根据各个成员的类型,按顺序依次初始化。同类型的结构体变量之间,可以相互赋值。结构体变量的使用:变量名.成员名。2.共用体中,成员共用一块空间。不超过,按照最大的字节对齐。
2024-08-09 21:44:40
275
原创 指针以及操作
指针数组:数组中存放着指针,也就是地址。1.可以定义一个函数类型的指针变量来保存函数的入口地址。2. 有了这个指针可以通过指针变量进行函数调用。函数名就代表着函数的入口,也就是首地址。回调函数 callback。通过指针的方式来调用函数。指针操作二位字符型数组。
2024-08-08 19:53:34
70
原创 指针操作一维数组
void *memcpy(void *dest, const void *src, size_t n(总字节数))const int *p = &a//限定基类型,表示不能通过*p的方式来修改值(只读)//限定基类型,表示不能通过*p的方式来修改值。// p指向二维数组名, *p 是里面的一维数组名。void * //空类型的指针,也叫万能指针,可以接受任意类型的指针。//限定指针变量p,p为只读。//p *p 都不可修改。1.如果不想通过*p方式改变基类型对应的数据。
2024-08-07 21:36:07
102
原创 指针以及快速排序
1.将数组首元素a[0]作为基准值,首位地址为begin,末位地址为end。//数组名a代表的是数组的首地址,表示p指向数组a。形参:指针类型变量,用来接收实参(实参是要访问的内存空间的地址)形参:数组形式//本质上是一个指针类型变量。地址传递:要改变的变量要传地址过来,但是要保证空间有效。p - q //表示相差几个基类型且是同一类型的指针。p + q p *q p/q //无实际意义,会报错。//p是指针类型,q是int类型。//空指针,地址为0。p + 1 //表示跳过了1个基类型。
2024-08-06 18:38:26
288
原创 预处理宏定义
对于一般的简短代码,考虑写成带参宏(不需要保存现场,还原现场,优势劣势都有)预编译:执行代码中的预处理命令,生成一个只包含的.c文件。函数的参数是有类型的,编译阶段是要进行类型检查的。将使用的代码链接到一起,最终生成可执行文件。宏的参数,只进行文本替换,不进行语法检验。//&a 的数据类型是 int *函数的使用本质上是函数代码的调用。宏的使用本质上是文本的原样替换。*p表示访问 p所指向的基类型的内存空间的内容。# undef N //取消宏名的定义。则预处理程序段1//保留程序段1的代码。
2024-08-05 20:48:09
357
原创 函数以及关键字
/ 3.static 修饰的变量 -- 只能用常量初始化 (不能用变量初始化)//表示限定全局变量的作用域位本文件,别的文件不能通过extern来声明使用。auto //表示它是一个自动变量 (局部变量) --- 自动申请 自动释放。extern //外部的 ---表示你的变量 是存在外部的 //多文件编程。//register 修饰的变量 ,不能 做 & //(取地址)// 2.static 修饰的变量 -- 具有继承性。[存储类别] 类型 变量名;
2024-08-04 23:05:51
400
原创 函数,递归
形参:写成数组形式,且需要数组长度 void sum(a[],len)函数调用的本质:利用栈的结构(先入后出)保证了函数可以层层嵌套调用。实参:数组名,数组长度 sum(a,len);主要用来存放自动变量或函数调用的数据。思路:要解决问题n,先解决问题n-1。函数不可嵌套定义,但是可以嵌套调用。空间大,可以手动申请,手动释放。1.能拆成函数的尽量拆成函数。存放全局变量 和静态变量。1.数组元素作为函数参数。2.数组本身作为函数参数。2.考虑健壮性,拓展性。
2024-08-02 22:08:36
220
原创 嵌入式学习之C语言
2.strcpy(*dest,*src)将src复制到dest dest:目标 src:源。int [3][4] a[2]:再两个int存储空间中,分别插入[3][4]二维数组。4.strcmp(a,b)比较大小,返回值为ab最后停的位置上的差值。3.strcat(*dest,*src)将src拼接到dest。二维数组: int a[2][2];2.二维数组实际上是数组的数组。1.c语言中不存在真正的数组。
2024-07-31 21:17:20
199
原创 嵌入式学习之c语言排序
擂台制,所取的数字作为第一个令其为最小值,后面的数字都与之比较,后面的数字更小则交换位置,比完一轮就可确定第一个数是最小的,接下来同理找第二小的。
2024-07-30 23:08:21
183
原创 嵌入式学习之c语言
先执行后判断,表达式为真一直执行语句,直至为假跳出;//为可变长数组,但是不可以进行初始化!求数组内有多少个数据可以用数组总长除以数据类型的长度。全部初始化:int a[3] = {1,2,3};结束本次循环,继续下一次循环,只用在循环语句中。部分初始化:int a[3] = {1};单一性:数组内数据的数据类型相同。数组下标:从0开始,表示偏移量。不初始化:int a[3];a的值为数组所占空间的首地址。a的数据类型为整个数组的类型。数组:存储一组的数据的集合。数组内的数据的数据类型相同。
2024-07-29 20:02:15
168
原创 嵌入式学习之c语言流程控制
表达式1?表达式2:表达式3表达式1成立执行表达式2,否则执行表达式3if else多种情况可以用else if 来继续选择最后用else 结束switch(表达式的值)case: ......default:break;未遇到break或者}都不结束,继续运行。
2024-07-28 22:32:07
174
原创 嵌入式学习之c语言
1.驼峰命名法:FirstNum 大驼峰 firstNum 小驼峰2.内核命名法:first_num3.要见名知意,尽量不用拼音。
2024-07-26 20:17:51
268
原创 嵌入式学习之c语言基础知识
n:换行\t:调到下一个制表符,制表符的长度为八个字节\b:退格\r:回车,回到本行开头字符常量:'A''\101':八进制'/x41':十六进制。
2024-07-25 20:46:21
175
原创 计算机基础知识
数据类型 int short long long long float double long double char 等。负数的反码为符号位不变,数值为取反;负数的补码为反码加一;特殊情况:1000 0000 0000 0000 其中的1既是符号位又是数值位。5.偏移量为127+2=129 二进制为1000 0001。unsigned 无符号位 signed 有符号位。1.先将整数位化为二进制为110(除二取余法)2.将小数位化为二进制为001(乘二取整法)6.以符号位 指数位 尾数位 结合。
2024-07-24 21:05:38
121
原创 linux基本命令
mv 源文件 目标文件 //目标文件不存在,为重命名;cp 源文件 目标文件 -r //若目标文件不存在,为复制一份;cp 源文件 目标文件 //将源文件复制一份,命名为目标文件。ls -a //查看所有文件(.开头的为隐藏文件)touch file1 file2 //创建文件。mkdir 1/2/3 -p //创建多级目录。ls -lh //带单位大小查看文件属性。mkdir 文件名 //创建目录。ls -l //查看文件属性。ls //查看目录下的文件。rm -r //删除文件夹。
2024-07-23 20:32:40
198
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人