- 博客(22)
- 收藏
- 关注
原创 【linux】网络基础3-网络套接字编程(TCP)
主执行流只干一件事:针对监听套接字获取新建连接,获取了一个新连接,就为这个新连接的操作创建一个执行流,其他执行流干的事情:每个执行流都只负责与一个客户端通信,这样做有个好处,任意一个线程阻塞,都不会影响其他线程,也就是不会影响与其他客户端的通信。注意:send和recv使用的sockfd是accept返回的通信套接字描述符,accept参数中的sockfd用的是socket接口创建的监听套接字描述符。:地址长度,输入输出参数-既要指定想要获取的大小,也会通过传址操作返回实际获取的大小。
2023-03-26 13:43:05
156
原创 【linux】网络基础2-网络套接字编程(UDP)
面向连接:通信前先建立连接,确保双方都具有数据收发的能力可靠传输:在网络正常的情况下,保证数据能够安全有序的到达对端字节流传输:传输单元以字节为单位,并且不限制传输数据大小,传输比较灵活。
2023-03-25 21:27:22
215
原创 【linux】网络基础1-网络概念
并且网络传输的数据中,必然都会包含有两个要素:源端iP地址,目的端iP地址,这两个信息标识了起点和终点,数据从哪来到哪去。负责应用程序之间的数据沟通的格式约定(QQ与QQ的沟通协议,SSH);内存地址有高低地址之分,数据二进制有高低位之分,,数据在内存进行存储,从低地址开始存储,到底先存高位还是低位。小明给小红发的消息是QQ消息,凭什么这个QQ消息就一定是QQ这个程序处理的,而不是主机上的w微信处理的。这两个信息描述了,是两台指定的主机上的哪两个进程之间的通信(理解:网络通信其实也是一种进程间通信)
2023-03-25 20:53:54
139
原创 【linux】线程学习3-线程安全
本质是一个计数器 线程在访问资源之前进行加锁操作,其他线程次期间不可访问并且阻塞等待,线程访问完毕之后解锁并唤醒其他进程。在多线程程序中,如果涉及到了对共享资源的操作,则可能回导致数据的二义性,而线程的安全就指的是,就算共享资源进行操作也不会导致数据二义。黄牛抢票的例子:一个火车站的抢票系统,里边用了一个ticket保存票数,有几个黄牛同时抢票,每抢到一张,ticket-1,大呼抢到了。线程1对资源获取条件进行判断,若线程不符合资源获取条件,则调用阻塞接口阻塞线程。没有则进厨房,有则阻塞。
2023-02-18 19:08:42
75
原创 【linux】线程学习2-线程控制
将指定线程状态从默认的joinable设置为detach状态,表示线程退出后制动释放所有资源不需要被等待。在linux下的线程操作接口,都是库函数,因为linux并没有直接向上层提供线程操作的系统调用接口。:传入一个pthread_t类型变量的空间地址,用于接收线程id-线程的操作句柄。:函数指针,传入线程入口函数的地址,这个线程调度运行的就是这个函数。:等待指定线程退出,获取退出线程的返回值,回收退出线程的所有资源。:创建一个线程,线程运行的是routine传入的地址对应的函数。
2023-01-10 22:44:24
57
原创 【linux】线程学习1-线程概念
不如进程健壮,但资源消耗小,线程间通信更加灵活(共享虚拟地址空间,全局变量,函数传参),创建和销毁的成本更低(线程大多资源共享,创建一个线程不需要分配太多空间,同进程的调度成本低,页表指针。线程控制(创建,终止,等待,分离),线程安全,应用(生产者与消费者模型,线程池,单例模式)对于安全性要求大于性能和资源要去的则使用多进程(比如shell),其他使用多线程。线程是cpu进行执行调度的基本单元;(进程是系统进行资源分配的基本单元)线程是进程中的一个执行流程。资源消耗大,更加稳定,健壮。
2023-01-10 22:06:50
48
原创 【C++】引用与指针的区别
3.然后传入*pa和*pb (ps:如果是一般的代码 这里解*pb空指针会报错)对此我们已经可以得到结论 int & a ==int * const a。并且报错内容为right是空指针所以引用的底层就是指针。5.最终会在left=right这行代码报错。会发现他们以相同的问题在同一个位置报错。1.首先简单调试测试一下代码的可行性。2.然后赋值pa和pb。
2022-11-24 10:11:26
330
原创 【C语言】删除公共字符
例如:依旧以上面的例子解释如果str1中有str2的字符 则会将该字符替换成"\0"也就是str1变成str1="sh\0 is the good student"就是将str2链接在str1后面;运行strtok(str1,str2),然后strtok将会返回一个指针 这个指针指的字符串就是"sh\0"然后再运行一次 strtok(NULL,str2)ps:这里将str1替代成NULL是因为这里面有全局变量。
2022-11-22 12:00:24
934
原创 【C++】命名空间的创建和使用
在C++后续的库中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作 用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字 污染,namespace关键字的出现就是针对这种问题
2022-11-17 13:36:19
738
原创 【C语言】通过快排思想实现删除数组中某一个值的所有元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。初始:nums=[1,3,5,6,1,3,4,2,3] ,val=3 ,left=0,right=8。第一次大循环后 left==1,right==7 nums==[1,2,5,6,1,3,4,3,3]不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。方法:定义两个指针:left指向数组最左,right指向数组最右。小循环{让right指向遇到的第一个非val}.
2022-08-18 12:09:33
461
3
原创 【C语言】使用双指针排序合并两个非递减数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。然后循环比较两个指针pm和pn指向值的大小,大的赋给i指针指向的位置。(ps:之所以一来指向尾部,是因为要是指向开头会出现覆盖数据)。方法:创建两个指针pm和pn 分别指向两个数组的尾部,然后再创建一个指针i指向sum1空间尾部。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。......
2022-08-18 11:55:31
896
2
原创 [C语言]左旋k个字符串(不需要创建临时变量,不越界)
例如 ABCDEFG 这样一个字符串 ,左旋3个字符,结果:DEFGABC方法:逆置ABC 结果:CBADEFG再逆置 DEF结果:CBAGFED最后整体逆置 结果:DEFGABC代码实现:测试结果: 全部代码:
2022-06-22 20:43:55
203
原创 [C语言]指针如何运算的
对于指针来说,指针的加减主要看指针的类型,比如 :例一:int *p;int *q=p+1;数值上 q=p+1*sizeof(int);例二:int **pp;int **qq=pp+1;数值上 qq=pp+1*sizeof(int*)
2022-06-20 18:51:23
150
原创 [leetcode]不用字符串方法判断是否一个整数为回文数
思路:将后面一半的数进行逆置,然后判断是否前一半和后一半相等。例如 val=abcdef,我们将后一半的数def 逆置为fed;然后判断后一半逆置的数fed和前一半的数abc是否相等,相等则为回文数。以下为C语言代码实现#include<stdio.h>bool fun(int val)//奇数偶数通用{ int tem = 0; while (val > tem)//直到tem位数大于或等于val { tem = tem * 10 + val % 10;/
2022-05-26 11:45:42
144
原创 10堆沙子那堆沙子溶解会变色问题(二进制标记和排序标记)
问题 :有十堆沙子 沙子放入水中2分钟就会溶解 其中又一堆溶解会变色 现在有4个量杯 由于时间紧迫 只有两分钟时间测试 问应该如何解决?
2022-05-16 11:58:14
136
原创 [C语言]C语言解决汉罗塔问题(初学者版)
目录1、汉罗塔问题解决思路:2、代码实现:函数部分:全部代码:运行结果:3、结语:1、汉罗塔问题解决思路:以三个为例,步骤为:1.首先我们需要将其分成两个整体;2. 然后记AC(1)=1,(1)表示最上面第一个的圆盘,AC表示从A移动至C,AC(1)表示将最第一大的一个圆盘从A移动至C;3.具体操作: a.我们需要计算的是AC(3)的步数; b. AC(3)=AB(2)+AC(1)+BC(2); c....
2022-04-16 20:58:17
1273
2
原创 [c语言]c语言中a++ ++a在加法运算中和printf函数中的运算顺序(初学者版)
加法运算顺序:结论:a++ ++a在加法中按如下顺序:1.sum的值先加上a++中的a;2.然后再进行++a中的++运算;3.然后加上a中的a的值;4.然后再进行a++中的++运算;5.然后再加上++a中的a的值;最后得到sum。具体详细步骤请看如下:#include<stdio.h>int main(){ int a = 0; int sum= (a++) + a + (++a); printf("a的最后值是");
2022-04-09 23:02:42
1517
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人