Wavesgf
码龄5年
关注
提问 私信
  • 博客:17,856
    17,856
    总访问量
  • 50
    原创
  • 1,034,884
    排名
  • 8
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:陕西省
  • 加入CSDN时间: 2019-12-09
博客简介:

ccbbird的博客

查看详细资料
个人成就
  • 获得12次点赞
  • 内容获得3次评论
  • 获得15次收藏
创作历程
  • 50篇
    2020年
成就勋章
TA的专栏
  • TCP
    4篇
  • C语言
    2篇
  • epoll
  • poll
    1篇
  • 排序
    5篇
  • 线程
    3篇
  • 读写锁
    1篇
  • 进程
    7篇
  • 进程间通信
    1篇
  • 信号
    2篇
  • 缓冲区问题
    1篇
  • 进程管理
  • 进程复制
  • 库文件
    2篇
  • 文件操作
    1篇
  • makefile
    1篇
  • gcc
    1篇
  • gdb
    1篇
  • 编译链接
    1篇
  • 进程命令
    1篇
  • 用户管理命令
    1篇
  • vim
    1篇
  • 基础命令
    1篇
  • 文件系统
    1篇
  • 报错类型
    1篇
兴趣领域 设置
  • 服务器
    linux
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

TCP协议及编程流程

TCP协议报头三次握手关于三次握手:A端发送请求后,B端确认后,还要A端也回复B确认,因为网络的拓扑结构,有时候发送的包会在网络中滞留,延迟到达,A要是一段时间收不到回复,会再次发送一个,B收到第二个包回复确认,如果此时A不回复确认,当第一个包到达B,B会认为有两个请求连接,但实际只有一个连接请求,但是在B端会为两个请求分配资源,会浪费资源;或者一个端不断发送SYN请求报文段,但是是恶意行为,做第二次确认回复,如果没有第三次确认,服务器每收到一个请求就分配资源,服务器资源就会被耗费最后奔溃;至于更
原创
发布博客 2020.10.13 ·
444 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

I/O复用 之 epoll

在I/O复用中,epoll的性能就比select和poll要更好了,但是epoll仅Linux独有epoll有三个接口int epoll_create(int size);创建一个epoll内核事件表(记录文件描述符和事件类型),底层是一颗红黑树,size象征性的给一个大小,但是具体并不由size限制,知识提示内核大概需要这么大int epoll_ctl(int epfd, int op, struct epoll_event * event);操作内核事件表,op操作对应插入EPOLL_
原创
发布博客 2020.10.10 ·
170 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

I/O复用 -- poll

在I/O复用中,相比较select,poll就要聪明一些,先看一下poll原型int poll(struct pollfd * fds, int nfds, int timeout);fds:传入的是数组nfds:数组长度timeout:定时时间,设为-1,永久阻塞返回值>0表示就绪文件个数,为零说明无就绪,<0表示出错从参数可以看出,poll传入的文件描述符个数并不受限制struct pollfd{int fd//文件描述符short events;//事件类型sho
原创
发布博客 2020.10.10 ·
175 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

I/O复用 -- select

在TCP服务编程模块,在处理客户端连接时候,仅能一次处理一个连接,而且当一个连接建立后,就不能和其他连接交互(仅一个进程),若连接的客户端并没有交互,但是其他客户端需要发送数据,此时就不能和服务器进行交互,所以逻辑处理性能并不好。我们通过I/O复用技术,来改善TCP服务编程I/O复用技术:在一定时间内可以将很多个套接字进行统一监听,每次只处理有事件发生的套接字从图中可以看出,我们在服务器端需要一个容器来放置所有需要监听的套接字,每次只对有事件发生的套接字进行处理select方法本身是一个系统调用
原创
发布博客 2020.10.10 ·
158 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

TCP -- 面向连接

面向连接面向连接,在服务器与客户端通信之前需要三次握手建立连接,通信之后需要四次挥手断开连接为什么建立连接:要使每一方能够确知对方存在要允许双方协商一些参数能够对运输实体资源进行分配三次握手过程关于三次握手:A端发送请求后,B端确认后,还要A端也回复B确认,因为网络的拓扑结构,有时候发送的包会在网络中滞留,延迟到达,A要是一段时间收不到回复,会再次发送一个,B收到第二个包回复确认,如果此时A不回复确认,当第一个包到达B,B会认为有两个请求连接,但实际只有一个连接请求,但是在B端会为两个
原创
发布博客 2020.09.26 ·
1096 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

排序实现与分析-- 堆排序

堆排序描述说实话,描述这一块一点头疼,感觉我会说的很乱,但我尽力0.0;堆排序,又是一个性能很棒的排序这个排序,我个人感觉好高级,速度很快,但是原理要烦躁一些,下边我们慢慢来说。如下是我们这次的待排序数据:我们把它换成树的样子,就变成了这样:这里我们黑色是数据,红色代表他在原数据中的索引,也就是下标,这是未调整的初始状态,接下来我们打断一下,说另一点,堆的问题:堆有大根堆和小根堆,大根堆就是指整个树中,所有的父节点的值都比孩子节点值大即为大根堆,反之则为小根堆,示例我们下图中“ 7,2,4
原创
发布博客 2020.09.10 ·
159 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

排序实现与分析 -- 选择排序

选择排序描述选择排序,也是一个很简单易实现的算法,顾名思义,选择即选出符合要求的数据,然后排序。大概过程如图:待排序数据“ 5,3,9,1,6 ”第一趟:设5为最小值,然后再后边序列选择出比5小的最小值,然后跟5交换;第二趟:设3为最小值,在后边序列找出比3小的最小值,然后跟自己交换;第三趟:设9为最小值,在后边序列找出比9小的最小值,然后跟自己交换;第四趟:设9为最小值,在后边序列找出比9小的最小值,然后跟自己交换;最后只剩一个数据,即在最后为最大值,五个数据跑四趟,每趟开头多一个有序
原创
发布博客 2020.09.09 ·
113 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

排序实现与分析 -- 快排

快速排序描述快速排序,是一个很重要的排序算法,当然其平均性能也比较高,他的思想我借鉴纪磊在啊哈算法中的形容来描述。在快排中,我们把待排序数据(如上图)中的第一个数据拿出来,称他为基准,就是拿接下来的数字都跟他进行比较,如下图所示,我们假设有两个炮兵(此处红五角星标识),一个在数据的最左边,一个在数据的最右边,刚开始我们右炮兵拿起他的数字7跟基准比,此数字大于基准6,所以炮兵往前走,9大于6,再往前走,3小于6,找到第一个小于基准6的数字,把3放到基准原位置,然后左炮兵往后找,5、4、1、2小于6,炮
原创
发布博客 2020.09.08 ·
122 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

排序实现与分析 -- 冒泡

冒泡排序描述冒泡排序算是比较简单的排序了,原理简单易实现。顾名思义,冒泡,将某个数据像冒泡一样“冒”在最高处,在排序过程中就像冒泡一样,每一趟将一个最大值“冒”到最后,然后下一趟。如下数列举例:6、5比较,6大于5,交换;6、7比较,6小于7,不交换;7、1比较,7大于1,交换,第一趟结束,结果如下:7有序,再从头开始,5、6比较,5小于6,不交换;6、1比较,6大于1交换,结果如下:6、7有序,5、1比较,5大于1,交换,结果如下:最终1自我有序,最终结果:代码实现void
原创
发布博客 2020.09.08 ·
95 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

排序实现与分析 -- 希尔排序

希尔排序按理解的话,其实希尔排序就是插排的升级版,他的思想是:对需要排序的数据进行分组,通过每组的插排使得组内有序,从而整体接近有序,此时对整体进行插排就很快(在插排中说过,插排,数据越有序速度越快)但是要注意的一点是,分组不是常规的认为那样分组(如上所示),上图在红蓝组内有序后,整体数据如下如此一看,整体并非有序,所以应该如下进行分组组内有序后 ,整体如下整体接近有序,达到要求希尔排序是结合了一定的数学问题的,数学问题给出了分组的方式,原理这里不做探讨,给出,尽量以素数分组,且最后一次分
原创
发布博客 2020.09.08 ·
138 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

排序实现与分析 -- 插排

插入排序思想插入怕排序是一种简单的排序方法,他的基本操作是将一个数据插入到已有序的序列中,从而得到序列数加一的新的序列插入排序中,我们先将最初始的有序序列数定为第一个数字,即在下列数据中为1,从第二个开始,当前有序列为“1”5和有序序列从头开始比较,发现5应该在1的后边,所以新的有序序列为“1,5”然后第三个数字3,和有序序列从头开始比较,发现3应该在1后边,所以我们把1后边的数据后移腾开位置,将3插入进来,此时有序序列为“1,3,5”第四个数字6,比较后找到位置,插入到5之后,新的序列
原创
发布博客 2020.09.07 ·
341 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux--线程下

信号量 – 线程级信号量类似于一个特殊的计数器,当信号量值大于零,表示可以访问的临界资源的个数,等于零,对信号量执行P操作会阻塞对信号量的P,V操作不一定非得在同一线程中信号量方法:#include <semaphore.h>信号量类型:sem_t 全局定义一个sem_t类型的信号量初始化:int sem_init(sem_t *sem, int shared, int init_val);shared:设置信号量是否在进程间共享,Linux不支持,一般给零init_val:信
原创
发布博客 2020.09.04 ·
134 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

Linux--线程中

线程间的数据共享:.data和.bss .heap 文件描述符(无论哪个线程打开一个文件,其他线程只要能够获取到对应的文件描述符,就可以访问这个文件)线程同步 --进程同步需要同步的原因:1.访问临界资源2.相互配合执行同步的方式:1.互斥锁(互斥量)2.信号量 – 线程级信号量3.条件变量4.读写锁互斥锁只有加锁和解锁两种状态;使用临界资源之前,对互斥锁执行加锁状态,如果锁是加锁状态,则加锁操作阻塞,直到有对其加锁过程的线程进行了解锁操作;使用临界资源后,需要对互斥锁进行
原创
发布博客 2020.09.03 ·
116 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

Linux--线程上

多线程编程线程概念:进程内部的一条执行序列,一个进程可以包含多条线程,至少一条线程,就是main方法所代表的这条执行流 – 主线程进程中的线程仅仅占一个栈帧线程的实现方式:内核级线程:优点:用户程序简单,一个线程阻塞可以切换到另一个线程。缺点:切换较慢,每次切换都得从用户态陷入内核态;内核需要维护线程的控制信息,比较消耗内核的内存资源。用户级线程:优点:在任何操作系统上都可以使用,比较灵活;切成块,切换在用户态下完成,不需要陷入内核;不需要修改操作系统,实现相对比较容易。缺点:用户程序编写比
原创
发布博客 2020.09.03 ·
165 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

Linux--进程间通信

系统是以进程进行工作的的,进程的地址空间是独立的,进程之间有可能需要数据交互进程间通信:1.管道:有名管道 无名管道2.信号量3.消息队列4.共享内存管道1.有名管道(半双工通讯)单工通信半双工通讯全双工通讯有名管道:在磁盘空间会有一个管道文件标识(inode节点),只要是有权限操作这个管道文件的进程,都可以利用其和其他进程进行数据交互有名管道虽然在磁盘上有管道文件标识,但在使用管道文件来进行进程通信时,数据会被缓存到内存上,并不会占据磁盘的block区域有名管道的使用创建
原创
发布博客 2020.09.02 ·
243 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

信号量习题

题目:三个进程分别打印A,B,C,要求输出的结果必须是“ABCABC”顺序执行设置三个信号量:sem1:初始值设置为1,保证进程可以执行,对sem1执行P操作,进程3输出C后,对sem1进行V操作sem2:初始值设为0,进程2执行后对sem2进行P操作,进程1输出A后对sem2进行V操作sem3:初始值设为0,进程3执行后对sem3执行P操作,进程2输出B后对sem3执行V操作sem.h#pragma oncetypedef union semun{ int val;}SemUn;in
原创
发布博客 2020.09.02 ·
455 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux--进程替换

进程替换:替换的是进程所执行的指令集合和数据exec系列方法:示例:test程序代码:main程序代码:执行结果:两个代码由一个进程执行,并且execl成功,exel之下的代码全部被替换;失败的话,执行原代码一般是和fork配合使用,fork之后,通常子进程使用exec做进程替换...
原创
发布博客 2020.08.31 ·
151 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux--信号

信号信号就是系统预先定义好某些特定的事件,信号可以被发送,可以被接收,发送和接收的主体都是进程。如果一个进程接收到了一个信号,就表示他接收到了一个发生的事件键盘上输入ctrl+c – > 就会给当前终端上执行的进程发送一个信号信号的定义:/usr/include/bits/signum.h1.修改信号的响应方式当进程接收到SIGINT信号后,打印“hello world”实现代码:实现结果:ctrl+c是终端前台接收signal修改了信号的响应方式,在下一次修改前都有效利
原创
发布博客 2020.08.31 ·
91 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux--僵死进程

僵死进程及其处理概念:父进程未结束,子进程结束,而且父进程未处理子进程的结束孤儿进程:父进程结束,子进程未结束,那么子进程就是一个孤儿进程,孤儿进程会被系统的init进程接管示例如下:模拟代码如下在子进程打出“child over”后,dead的子进程还是未结束(defunct标识)此为僵死进程僵死进程的处理:在父进程中调用系统调用方法:pid_t wait(int *status)调用时,是此时传递一个变量的地址,返回子进程的退出状态返回处理子进程的PID,如果失败,返回-1一个父进程存
原创
发布博客 2020.08.31 ·
200 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux--库函数和系统调用

文件操作的系统调用 – open read write close lseekfork库函数:fopen fwirte fclose fread fseek库函数和系统调用的区别:库函数:调用在用户态,实现也在用户态,但是有可能需要转调系统调用系统调用::调用在用户态(权限相对较小),实现在内核态(计算机的最高权限)系统调用过程:1.每一个系统调用都有唯一的一个与其相对应的系统调用号,调用方法时,将其系统调用号保存在exa寄存器中2.产生0x80中断调用其对应的中断处理
原创
发布博客 2020.08.31 ·
243 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多