- 博客(31)
- 收藏
- 关注
原创 Linux下常用的IO模型
Linux下常用的IO模型:1. 阻塞IOfgetsreadgetcharfreadfgetcrecvrecvfrom1. 让多个IO事件以同步方式处理,2. 多个IO事件之间互相影响3. CPU占有率低2. 非阻塞IO将IO对应的文件描述符设置成非阻塞方式。O_NONBLOCKfcntl1.非阻塞一般搭配轮询方式同时监测多个IO2.cpu占有率高3. 信号驱动IOSIGIO1.实现异步IO操作,节省CPU开销。
2025-01-10 19:40:32
1579
原创 【无标题】
在不创建进程和线程的前提下,对多个文件描述符进行同时监测。让tcp服务具备同时处理多个客户端的能力(一对多)IO:fd读写, 共用一个进程。多线程模型创建线程耗时问题。TCP:面向连接------》一对一。
2025-01-10 19:20:24
245
原创 【无标题】
http协议是工作在应用层,基于TCP协议,默认端口号为80(备用端口号为8080),面向文本的一种集文字,图像,音频,链接等于一体的超文本传输协议。url 的一般形式如下: <协议>://<主机>:<端口>/<路径>2. 客户端给服务器发送http请求报文。3. 服务端发送http响应报文给客户端。其中端口号一般为80,可以省略。url:统一资源定位符:标记万维网文档。1. 建立tcp连接。4. 断开tcp连接。万维网服务器:Web。
2025-01-07 19:32:51
292
原创 TCP粘包问题及其内部机制
3. PSH: 表示发送数据,提示接收端从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。帧头 : 1个字节 0xAA 0x5A 0xA5 0x7E。数据长度:1个字节/2个字节 有效数据的字节数(不包含帧头和帧尾)1. URG: 紧急指针标志, 为1时表示紧急指针有效, 该报文应该优先传送。帧尾: 1个字节 0xBB 0x55 0xA5。2. 接收缓冲区数据没有及时读走,多包数据在缓存在了接收缓冲区。校验:8bits和校验:数据累加求和取低8bits。
2025-01-07 19:18:45
385
原创 进程件通信——网络通信——TCP
四次挥手:tcp为了确保断开连接时,通信双发都收发数据结束,在断开连接时,进行四次挥手。三次握手:tcp为了确保通信双方都已准备就绪,在建立连接时,要进行三次握手操作。网络抓包工具:wireshark 抓取经过设备网卡的数据。backlog:允许同时监听的客户端的个数。addrlen:客户端地址大小的指针。addr:建立连接的客户端地址。2. 选择要抓取的网卡----》any。对方断开连接:不再阻塞, 返回0。功能:负责监听需要建立连接的客户端。应用: 要求数据安全可靠的场景下。
2025-01-06 19:41:06
606
原创 进程间通信——网络通信——UDP
2.编辑——>虚拟网络编辑器——>更改设置——>VMnet0——>桥接模式——>桥接到电脑正在上网的网卡——>应用——>确定。进程间通信(分类):网络通信、无名管道、有名管道、信号、消息队列、共享内存、信号量集。htons: 将主机字节序(小端)的short类型转换成网络字节序(大端)htonl: 将主机字节序(小端)的long类型转换成网络字节序(大端)inet_addr() : 将字符串ip转换成网络字节序的二进制ip。应用程:HTTP, HTTPS(超文本传输协议) (基于TCP)
2025-01-06 19:30:16
1476
原创 无名管道通信与有名管道通信
2. read到0:当所有的写端关闭,管道中有数据时,读到数据,无数据则read不阻塞,返回0;1. 读阻塞: 读端和写端都存在时, 当管道中无数据时,read阻塞等待读。4. 管道破裂:当所有的读端关闭,向管道中写数据,发生管道破裂(异常)3. 写阻塞: 当读端和写段都存在时,当管道满,则发生写阻塞。无名管道:只能用在同一主机具有亲缘关系的进程间通信pipe。有名管道:可以用在同一主机任意进程间通信fifo。4. 关闭管道:close()3. 读管道:read()1. 创建管道:pipe。
2024-12-30 19:38:08
252
原创 多任务-线程
与同一进程中的其他线程共用进程的堆区,数据区,文本区 线程是cpu任务调度的最小单位。线程非分离属性:能被pthread_join回收或者能被其他线程结束的线程,称为具有非分离属性的线程。线程:轻量级的进程,栈区独立(8M),与同一进程中的其他线程共用进程的堆区,数据区,文本区。3. 设置线程的分离属性:pthread_attr_setdetachstate();线程分离属性:不需要回收,或者执行结束会被系统回收的线程,称为分离属性的线程。
2024-12-27 19:53:05
652
原创 多任务处理
(bss段在被创建时按位清零)数据区->data段:已初始化的全局变量和已初始化的static静态变量。数据区->bss段:未初始化的全局变量和未初始化的静态变量。3. 函数调用时保护现场和恢复现场。2. 函数的形参和返回值。4. 由操作系统个管理。堆区:1. 由开发人员手动申请和释放。数据区->字符串常量区:字符串常量。内核区:1. 文件管理。栈区:1. 局部变量。
2024-12-25 20:06:02
246
原创 标准IO相关函数接口
SEEK_END:文件末尾 offset:可正可负。功能:获取1970-1-1 0:0:0到现在的秒数。stream:要写入的文件流指针。stream:要重新定位的文件。功能:将格式化后的字符串写道str指向的内存空间。size:写入的每个元素的大小。nmemb:要写入的元素的个数。ptr:要存放读取到的数据的首地址。功能:向文件中写入指定大小的nmemb个元素。ptr :要写入数据的首地址。成功:实际写入的元素个数。nmemb:期望读到的元素的个数。成功:返回实际读到的元素个数。
2024-12-20 19:59:39
376
原创 文件操作—标准IO
fgets fputs :一行读写 作用:主要用来操作普通文件中的ASCII文件,不能操作二 进制文件。"w" :以写的方式打开,文件不存在则创建,文件存在则清空。"w+" :以读写方式打开,文件不存在则创建,文件存在则清空。"a+" :以读写方式打开,追加写,文件不存在则创建。
2024-12-19 19:38:33
559
原创 结构体与位运算
(按位与) ——>指定位清0。按位与只能与整型或与其兼容的数据类型运算。^ (按位异或) ——> 按定位翻转。|(按位或) ——> 指定位置1。memcpy 函数的实现。
2024-12-09 19:32:11
331
原创 结构体操作
注意:结构体传参时,一般都设计成指针形式;访问结构体成员:结构体类型变量.成员变量,结构体类型的指针->成员变量。引用结构体变量:结构体变量名.成员变量名,访问到这个成员,如:s.name 表示访问s中name。32位的平台,如果有超过4字节,按照4字节对齐,如果没有超过4字节的,则按成员变量中最大对齐;定义变量:struct student s;64位的平台 ---- 64位平台 整个结构体对齐, 按成员中最大的对齐。成员数据 (变量形式定义的)结构体类型 --- 描述学生信息的。
2024-12-06 20:48:44
349
原创 【无标题】
p+N 指针 + N 表示 加了一个 基类型大小 sizeof(基类型)> >= < 首元素的地址 数组名。#define NULL (void *)0 //空指针。step1: 找基准值 //基准值的位置。step2: 从右向左 找第一个比基准值小的值。step6: 将相遇位置上的值 与 基准值交换。p + q //不能做。p * q //不能做。
2024-12-04 20:07:22
143
原创 函数递归问题;标识符的作用域 和 可见性问题;预处理
gcc -c hello.s -o hello.o //object (机器代码)---- 将.c代码中 预处理命令 执行。则,内层的作用域的同名标识符,会屏蔽外层的作用域的同名标识符。可见性:程序的角度,在运行到某句代码时,哪些标识符,可以被用。需要将用到的别的函数的代码实现链接到最终的 可执行程序中。---- 得到 全是c代码的 文件。4.如果是不同的作用域,但是作用域之间存在嵌套关系,3.在不同的作用域,同名标识符,相互之间没有影响。将c代码的文件,编译成 汇编代码。
2024-12-02 21:51:47
475
原创 【无标题】
int a[][4] ---->列数不能省略 (本质上还是个一维数组)实参 数组名 --->不需要传数组长度 (字符串本身有结束标志)(与 整型 二维数组作函数参数 书写方式相同)实参 数组名 行数。实参 数组名 行数。形参 数组形式 + 行数。形参 数组形式 行数。字符型二维数组 作函数参数。字符型一维数组 作函数参数。字符型二维数组做函数参数。整型二维数组做函数参数。
2024-12-01 16:02:24
216
原创 scanf函数与if 语句用法
占位符整型%d 转换为 有符号 十进制 形式 //表示将数据转换为 对应格式 存放到内存中%u 转换为 无符号 十进制 形式%x 转换为 十六进制 形式%X 十六进制中的 字母 转换为大写形式%o 转换为 八进制 形式浮点%f 转换为 小数形式输出 默认保留6位小数%lf double 数据。
2024-11-25 20:51:11
1953
原创 数据类型、运算符
1位 8位 23位。1位 11位 52位。二进制 转 八进制 方法:一位八进制数 对应 三位二进制数(421)二进制 转 十六进制 方法:一位十六进制数 对应 四位二进制数 (8421)符号位| 指数位 | 尾数位。符号位| 指数位 | 尾数位。3. 常量后面,可以添加 f 这种的表示将常量 识别为float类型。常量: 在程序运行过程中,其值不能被改变的量称为常量。变量 :在程序运行过程中,其值能被改变的量称为变量。
2024-11-22 18:52:34
548
原创 嵌入式操作基础
step2: 默认进入的是vim的"normal模式" ,按 i 键 进入到 "insert模式" 输入代码。step3: 先(按ESC)退出"insert 模式" //默认就回到了"normal模式"mkdir -p a/b/c 表示当前目录下创建一个三级的目录 a/b/c。mkdir (make directory) 功能: 创建一个目录。ls (list) 功能: (列表) 可以查看指定目录下的内容。cd (Change Directroy) 功能:改变工作目录。
2024-11-21 20:01:25
481
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅