- 博客(37)
- 资源 (1)
- 收藏
- 关注
原创 三次握手与四次挥手
1.1:特性lsocket同样可以用于本地通信l创建套接字时使用本地协议AF_UNIX(或AF_LOCAL)。l分为流式套接字和用户数据报套接字l和其他进程间通信方式相比使用方便、效率更高l常用于前后台进程通。
2024-11-23 16:58:25
889
原创 服务器模型
机制,将新连接的客户端描述符增加到描述符表中,只需要一个线程即可处理所有的客户端连接,在嵌入式开发中应用广泛。fork之前的代码被复制,但是不会重新执行一遍;fork之后的代码被复制,并且被再次执行一遍。fork之前打开的文件,fork之后拿到的是同一个文件描述符,操作的是同一个文件指针。同一时刻能响应多个客户端的请求,常用模型:多进程模型、多线程模型、IO多路复用。fork之后两个进程相互独立,子进程拷贝了父进程的所有代码,但是内存空间独立。
2024-11-23 15:51:49
237
原创 UDP的编写以及使用
UDP (User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输Dos(拒绝式服务)攻击?DOS:即 Denial of service,拒绝服务的缩写,拒绝服务,Dos 攻击即攻击者想办法让目标机器停止提供服务或资源访问,这些资源包括磁盘空间、内存、进程甚至网络带宽,从而阻止正常用户的访问。要对服务器实施拒绝服务攻击,主要有以下两种方法:①迫使服务器的缓冲区满,不接收新的请求;
2024-11-23 14:53:12
297
原创 网络编程(1)
补充:光猫:类似于数字解调器的设备,3:交换机和路由器:交换机:用于局域网内的网的数据转发路由器:用于连接局域网和外网注释:注意交换机没有IP分配和IP寻址的功能,所以交换机不具备路由器功能。
2024-11-21 19:04:59
771
原创 项目:华清速递
1.4:服务器:通过tcp 协议哥select函数实现并发式服务器,,在函数体内部,新建数据库,库中包括三个表,分别是用户账号密码表,快递信息表以及历史记录表,编写相应子函数,进行调用,在连接客户端的基础上,进行相关操作。
2024-11-21 17:21:58
380
原创 共享内存实现进程间通信
通过共享内存实现进程间通信,一个进程从终端输入数据,另一个进程打印数据,循环执行,当输入quit时循环结束思路:构建建构体,通过两个进程实现,input.c和output.c联合编译:汇编:gcc 生成结构体创建:int flag;二:input.c。
2024-08-22 20:27:32
455
原创 IO进程(进程通信和共享内存)
功能:信号处理函数参数:signum:要处理的信号handler:信号处理方式SIG_IGN:忽略信号SIG_DFL:执行默认操作handler:捕捉信号void handler(int sig){} //函数名可以自定义返回值:成功:设置之前的信号处理方式失败:-1注释:函数指针的定义格式以及用法void func1(void) //定义一个函数,以方便下面定义函数指针//函数指针定义//函数指针赋值(*pFunc)();//函数指针调用;
2024-08-22 19:51:38
1679
原创 IO进程(6)
1:当管道中无数据时,读操作会阻塞; 管道中无数据时,将写端关闭,读操作会立即返回2.管道中装满(管道大小64K)数据写阻塞,一旦有4k空间,写继续3:管道读端存在时,向管道中写入数据才有意义,否则,管道就会破裂,向管道中写入数据的进程将收到内核传来的SIGPIPE信号 (通常Broken pipe错误)。Broken pipe:管道破裂1.4:函数注释:创建子进程,父进程循环从终端输入字符串,子进程循环打印数据,当输入quit时程序结束二:有名管道(文件IO书写)
2024-08-21 19:52:51
994
原创 IO进程(5)
1.2:同步概念多个线程(任务)按照约定的顺序相互配合完成一件事1.3:信号量通过信号量实现线程间同步。信号量:由信号量来决定线程是继续运行还是阻塞等待,信号量代表某一类资源,其值表示系统中该资源的数量信号量是一个受保护的变量,只能通过三种操作来访问:初始化、P操作(申请资源)、V操作(释放资源)信号量的值为非负整数。
2024-08-20 20:00:03
1046
原创 IO进程(3)
linuxsoawindowsdllcdusrliblib库文件cdusrincludeinclude头文件由于windows和linux的本质不同,因此二者库的二进制是不兼容的1.2:库的分类静态库和动态库:本质区别是代码被载入时刻不同静态库编译时会被连接到目标代码中优点:程序运行时将不再需要该静态库;运行时无需加载库,运行速度更快缺点:静态库中的代码复制到了程序中,因此体积较大;
2024-08-17 19:32:40
1028
原创 IO进程
FILE代表的是结构体,描述所操作文件的信息3补充:sudo ctags -R的使用(可以追代码):简历搜索索引vi -t FILE选择合适的编号将光标定位在目标位置,ctrl+] :向下追代码ctrl+t:回退q:退出。
2024-08-14 19:42:45
663
原创 链式队列的使用
1)逻辑结构:线性结构2)存储结构: 链式存储//数据域//指针域typedef struct//将队列头指针和尾指针封装到一个结构体里//相当于队列的头指针//相当于队列的尾指针//有了链表的头指针和尾指针,那么我们就可以操作这个链表(1)创建一个空的队列(2)入列(3)出列二:头文件的定义。
2024-08-10 14:39:16
879
原创 顺序表的使用
int last;//最后一个有效元素下表}seqlist_t;//1.创建一个空的顺序表//返回的是申请空间的首地址//2.向顺序表的指定位置插入数据//post第几个位置,data插入的数据//3.遍历顺序表sequence 顺序 list 表//4.判断顺序表是否为满,满返回1 未满返回0//5.判断顺序表是否为空//6.删除顺序表中指定位置的数据post删除位置//7.清空顺序表//8.修改指定位置的数据//post被修改的位置,data修改成的数据。
2024-08-10 14:10:42
177
原创 栈的使用(先入后出)
什么是栈?只能在一端进行插入和删除操作的线性表(又称为堆栈),进行插入和删除操作的一端称为栈顶,另一端称为栈底2.栈特点先进后出 FILO first in last outLIFO31顺序栈1逻辑结构线性结构2存储结构顺序存储3操作入栈出栈seqstackint*data;intmaxlen;inttop;seqstack_t;
2024-08-08 15:56:47
678
原创 链表的使用和总结
/数据域//指针域,指向自身结构体的指针//1.创建一个空的单向链表(有头单向链表)//2.向单向链表的指定位置插入数据//p保存链表的头指针 post 插入的位置 data插入的数据//3.遍历单向链表//4.求单向链表长度的函数//5.删除单向链表中指定位置的数据 post 代表的是删除的位置//6.判断单向链表是否为空 1代表空 0代表非空//7.修改指定位置的数据 post 被修改的位置 data修改成的数据。
2024-08-07 20:25:16
892
原创 数据结构.
等差数列{an}的通项公式为:an=a1+(n-1)d。前n项和公式为:Sn=n*a1+n(n-1)d/2或Sn=n(a1+an)/2。如果有常数项,将其置为1 //当f(n)的表达式中只有常数项的时候,有意义 f(n) = 8。f(n) //算法的可执行语句重复执行的次数 用问题规模n的某个函数f(n)来表达。高效性:可执行语句重复执行的次数来衡量算法是否高效(时间复杂度)(1)根据问题规模n写出表达式 f(n)2.1:数据:不是单一数值,与集合类似。T(n) //问题规模的时间函数。
2024-08-06 13:53:47
987
原创 递归函数以及结构体
斐波那契数列:指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*) 求第五个数。求5的阶乘5!12345递归公式:1 n<=1fac(n)=
2024-07-26 19:06:57
1912
原创 函数相关内容
1.1定义格式存储类型 数据类型 函数名(数据类型 形参1, 数据类型 形参2,...)函数体;return a+b;int num=0;num=a+b;return num;fun(1,2);return 0;5.3:参数传递值传递单向传递,将实参这个数据传递给形参使用,函数内改变形参函数外的实参不会受影响,因为他们是属于不同的空间。地址传递双向传递,在函数内通过传递的地址修改地址所指空间中的内容,实参会随之变化。(*a)++;(*b)++;//11 31。
2024-07-25 20:49:48
330
原创 二级指针以及数组的使用
不允许修饰普通变量: void a;//错误!!可以修饰指针: void *p;//此时p是一个任意类型的指针使用场景:函数传参或函数返回值。例如malloc函数的返回值。注意: 通过void型指针进行取内容时,需要对地址进行强转。转换方式:强制转换: (int *) p 为右值。1.2:大小端的使用大端:数据的低位存储在高地址位,数据的高位存储在低地址位,大端字节序称为MSB小端:据的低位存储在低地址位,数据的高位存储在高地址位,小端字节序称为LSB。
2024-07-25 20:20:26
2327
原创 一级指针的相关知识梳理
存储类型数据类型 *指针变量名;数据类型代表指针所指空间存放的数据的数据类型intp;定义了一个指向int类型数据的指针变量p注释:常量不可以改变那么变量p存放的就是a的地址q变量存放的是b的地址。通过运算符就可以访问地址所表示空间里面内容。指针操作符和初始化&:取变量的地址*:取地址里的内容aa;和是互逆运算(可以抵消)a;错误。
2024-07-23 19:36:02
460
原创 冒泡排序与选择排序
(1)首先通过n-1次比较,从n个数中找出最小的, 将它与第一个数交换—第一趟选择排序,结果最小的数被安置在第一个元素位置上。(2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录,将它与第二个数交换—第二趟选择排序(3)重复上述过程,共经过n-1趟排序后,排序结束。
2024-07-22 19:05:24
745
原创 一维数组的使用
int main()i++)//strlen计算长度i++)注释:数组名代表数组首地址,第一个地址元素,是一个常量,不能够被赋值数组表达式中可以包含常量和符号常量,即宏定义,不包含变量int main()第一个元素的访问:a[0]第n个元素的访问:a[n]数组越界:当定义数组为int类型a[5]时,其元素的访问包含a[0],a[1],a[2],a[3],a[4];超出其限定范围例如:a[5]则视为越界int main()数组越界a[3]=10;//数组越界。
2024-07-19 20:30:21
394
原创 控制语句与循环语句的使用
首先执行表达式1进行赋值,然后判断表达式2是否成立,如果成立就进入循环执行语句块,再执行表达式3进行增值或减值然后继续判断表达式2是否成立,直到表达式2不成立退出循环。2. case后面的break可以省略,但是省略时会顺序执行,直到遇到break结束;思路:for循环,确定循环范围,定义三个变量接受,if判断各位立方和是否等于这个数本身。对于其他类型,则必须使用if语句。(3)case标签必须是唯一性的表达式;(2)case标签必须是常量表达式,如42或者'4'。(1)只能针对基本数据类型中的。
2024-07-18 20:02:35
544
原创 c基础知识
&&:前表达式为假,后续不执行||:前表达式为真,后续不执行注释:注意运算优先级^:相同为0,不同为11111 1110 1111 10110000 0101置零公式与之置一公式:置一公式:a|(1<<n)置零公式:a&(~(1<<n))从右向左:单条赋4:字符的输入输出输出:putchar()/ /printf()输入:getchar()/ /scnaf()//scanf("%d",&a);垃圾字符处理方式:printf函数中格式的区别:格式字符:%d int%ld long
2024-07-17 19:50:37
728
原创 Linux基本命令以及进制数转换知识汇总
n,$s/str1/str2/g替换第n行到最后一行中所有str1为str2。n,ms/str1/str2/g替换第n行到第m行中所有str1为str2。-- a从光标所在位置后面开始新增资料,光标后的资料随新增资料向后移动。-- i从光标所在位置前面开始插入资料,光标后的资料随新增资料向后移动。:s/str1/str2 光标所在行第一个str1替换成str2。s/str1/str2/g 光标所在行所有str1替换成str2。%s/str1/str2/g每一行中所有str1来替换成str2。
2024-07-15 20:11:12
872
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅