![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
choudan8888
给未来一个机会
展开
-
linux实现基础网络库(socket,epoll,pthread,cmake,pipe, sem,codition,)
客户端命令编译:g++ epollclient.cpp -o client -lpthread。服务器命令编译:g++ epollserver.cpp -o server -lpthread。面试时经常会问到网络库,好久没看过这块知识了,实现一下,用到了一下一些知识点。以下是服务器的编译文件:CMakeLists.txt。以下是客户端的编译文件:CMakeLists.txt。下面是服务器代码:epollserver.cpp。以下是客户端代码:epollclient.cpp。原创 2023-10-25 14:30:10 · 353 阅读 · 0 评论 -
linux 安装不同版本的C++
配置linux开发环境原创 2022-06-21 14:47:48 · 797 阅读 · 1 评论 -
三次握手和四次挥手详解
一、三次握手所谓三次握手就是客户端和服务器建立tcp链接,总共需要客户端和服务器发送三个包。1. 客户端申请建立链接,并向客户端发送序列号。2. 服务器接受客户端发来的申请后,向客户端发送确认号和自己的序列号3. 客户端在给服务器回复确认号,链接就建立成功了。在tcp/ip协议中,tcp提供的是可靠的,有连接的流式服务,采用三次握手建立连接,如上图所示:1.第一次握手:...原创 2019-01-13 00:07:35 · 141 阅读 · 0 评论 -
编译和链接的那些故事
编译连接过程从预编译->编译->汇编->连接(1)预编译 gcc -E main.c -o main.i 内部处理:宏定义处理、头文件包含的指令、删除注释、特殊符号的处理(2)编译 gcc -S main.i -o main.s 编译环节是对源代码进行语法分析,并优化产生对应的汇编代码 生成符号、产生汇编代码 (3)汇编...原创 2018-10-29 23:23:44 · 316 阅读 · 0 评论 -
exce
1. exec函数说明fork()函数通过系统调用创建一个与原来进程(父进程)几乎完全相同的进程(子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程不共享这些存储空间。linux将复制父进程的地址空间内容给子进程,因此,子进程由了独立的地址空间。),也就是这两个进程做完全相同的事。在fork后的子进程中使用exec...转载 2018-05-20 23:09:33 · 279 阅读 · 0 评论 -
线程同步之条件变量
1.条件变量是锁吗? 不是锁,但是条件变量能够阻塞线程条件变量需要和互斥锁一起使用 互斥量:保护一块共享数据 条件变量:引起阻塞2.条件变量的两个动作?当条件满足,通知阻塞的线程线程开始工作 条件不满足,阻塞线程3.条件变量的类型 pthread_cond_t;4.主...原创 2019-08-04 21:30:01 · 332 阅读 · 0 评论 -
同步、异步、阻塞、非阻塞的区别
1. 同步同步和异步关注的是消息通信机制。所谓同步就是,系统发出一个调用,在没有得到结果之前该调用是不会返回的,一直会等到该调用得到返回值。如果一个调用很快返回,就一定是得到了返回。就是调用者会主动等待这个调用的结果。举个例子:今天老师上课问学习委员今天作业交齐了没有,学习委员立马检查后就给老师说,交齐了;如果学习委员没有改老师答案,老师会一直等学习委员给他回复。例如:普通B/S模式:提交...原创 2019-07-27 18:04:02 · 245 阅读 · 1 评论 -
线程同步之信号量
信号量的头文件 #include<semaphore.h>信号量不像条件变量那样不是锁,信号量是锁,是互斥锁的加强版。pthread_mutex_t mutex;这个互斥锁lock(),mutex == 0,unlock(),mutex==1;线程间访问共享资源是串行的。信号量 sem_t sem; 信号量设置的初始值可以不为1,假设一开始设置信号零的初始值为3;当第一...原创 2019-08-05 21:08:04 · 638 阅读 · 0 评论 -
生产者和消费者代码实现
信号量实现生产者和消费者模型 有一块固定容量的缓存区,有多个线程同时访问或操作这个块缓存区,而此时,一个线程称为生产者,生成数据到这块缓存,另一个线程消费者从这个块缓存里读取数据,这个过程就可能引发一系列线程安全问题。而解决问题的关键就是,使消费者和生产者同时只能有一个线程访问这块缓存,也就是说它们之间是互斥的。方法一:信号量信号量设置的初始值可以不为1,假设一开始设置信号...原创 2019-08-05 21:26:39 · 1707 阅读 · 0 评论 -
进程间通信之——管道
进程间通信(inter process communite)之管道1.管道的分类有名管道、没有血缘关系的进程间通讯fifo() 无名管道、只能进行父子进程间的通讯pipe() 不管是有名管道还是无名管道都是往内核中写数据2.管道的实现:环形队列3.管道的大小:4K4.局限性:数据只能读取一次,不能重复读取,头指针write在前面写,尾指read在后面读,循环读5.模式...原创 2019-08-02 11:22:37 · 171 阅读 · 0 评论 -
git基础使用
1.git安装在官网下在一个安装包,点击安装会弹出下面的界面,跟着我的选择选就欧克,点击下一步当遇到这个界面的时候需要改动,本来是选择的是第二个,现在改成第一个,然后继续点击next就可以安装完成2.创建SSH密钥在这里你需要创建一个本地的git文件存储目录现在打开刚才安装的github客户端,进入到你创建的这个文件下,然后输入命令,后面的邮箱改成你自己注册时用的邮...原创 2019-08-07 16:00:16 · 138 阅读 · 0 评论 -
TCP包头部信息
如果tcp的首部不带任何数据信息的话,通常是20个字节大小。每一个tcp包头部都包含以上的信息,我们详细的来了解一下16位源端口号和16位目的端口号:用来寻找发送端和接收端应用程序,这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP链接。32位序号:序号用来标识从tcp发端向tcp收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。如果将字节流看成是在两...原创 2019-08-26 11:11:13 · 1163 阅读 · 0 评论 -
HTTP中GET和POST的区别
HTTP中的多种请求方法GET:申请获取资源,而不对服务器产生任何影响HEAD:和GET方法类似,不过仅仅要求服务器返回头部信息,而不需要传输任何实际内容POST:客户端向服务器提交数据的方法。这种方法会影响服务器,服务器可能会根据收到的数据动态创建新的资源,也可能更新原有的资源。PUT:上传某个资源DELETE:删除某个资源TRACK:要求目标服务器返回原始请求的内容。它...原创 2019-08-27 14:41:33 · 962 阅读 · 1 评论 -
Linux中的GDB调试
GDB概述linux下的GDB是一个用来调试C和C++程序的强大的调试器,他能在程序运行过程中观察程序的内部结构和内存的使用情况GDB的使用gdb是一个命令行方式的调试工具,在Linux的命令提示如下输入gdb,系统便会启动gdb,也可以在gdb后面给出为文件名,直接指定想要调试的程序,例如:gdb main.c就是开始调试main.c程序。在调试之前,我们需要把可调试的信息装载到可执...原创 2019-08-31 12:09:27 · 218 阅读 · 0 评论 -
HTTP、HTTPS和SSL的加密过程
HTTP协议的特点支持C/S模型(客户端/服务器模型) 简单快速:客户端向服务器请求服务时,只需传送请求方法和路径。请求的方法常用的有GET,POST,HEAD等,每种方法规定了客户端和服务器联系的类型不同。 灵活:HTTP允许传输任意类型的数据对象 无连接:无连接指的是客户端和服务器每一个链接值允许处理一个请求。服务器处理请求收到客户端的回复之后就会断开链接,这种方式可以节省传输时间...原创 2019-09-02 23:38:01 · 1134 阅读 · 0 评论 -
HTTP2.0和HTTP1.0的区别
HTTP2.0的新特性HTTP2.0引入了服务端推送:例如我的网页有一个sytle.css的请求,在客户端收到sytle.css数据的同时,服务端会将sytle.js的文件推送给客户端,当客户端再次尝试获取sytle.js时就可以直接从缓存中获取到,不用再发请求了。新的二进制格式制:HTTP1.0的解析是基于文本,基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑...原创 2019-09-08 15:49:53 · 913 阅读 · 0 评论 -
I/O函数复用——select、poll、epoll
一、什么是I/O多路复用?I/O多路复用是指内核指定的一个或多个IO条件准备读取,它就通知该进程。适用于如下场景:当客户处理多个描述符时(一般是交互式输入和网络套接字),必须使用IO复用 一个tcp服务器既要监听套接口,又要处理已经连接的套接口,一般也要用到IO复用 一个服务器既要处理tcp又要处理udp,一般也要使用IO复用 一个服务器要处理多个服务和多个协议,一般要用到IO复用...原创 2019-01-15 14:07:44 · 160 阅读 · 0 评论 -
select、poll和epoll的区别
select、poll和epoll都可以同时监听多个文件描述符。他们将等待指定时间,直到一个或多个文件描述符上有事件发生返回,返回值是就绪的文件描述符数量。返回0表述没有事件发生。一下就是select、poll和epoll的不同:1. 向内核传递描述符select 每轮循环都要重新拷贝到内核空间poll 每轮循环都要重新拷贝到内核空间epoll 每个文件描述符值...原创 2019-01-15 16:30:39 · 92 阅读 · 0 评论 -
epoll中LT和ET模式的区别
epoll对于文件描述符的操作有两种模式:LT模式是默认的工作模式,这种模式下epoll相当于一个效率较高的poll。当往epoll内核事件表中注册一个文件描述符上的EPOLLET事件时,epoll将以ER模式来操作改文件描述符,ET模式是epoll的高效工作模式。 对于采用LT工作模式的文件描述符,当epoll_wait监测到其上有事件发生并将此事件通知应用程序后,应...原创 2019-01-15 16:55:07 · 1180 阅读 · 0 评论 -
内存管理之分页和页表
简单的分页:内存被划分为许多大小相等的页框;每个进程被划分成许多大小与页框相等的页;要装入一个进程,需要把进程包含的所有页都装入内存中不一定连续的某些页框中。优势:没有外部碎片。缺点:有少量的内部碎片。简单的分段:每个进程被划分为许多段;要装入一个进程,需要把进程中包含的所有段装入内存内不一定连续的某写动态分区中。优势:没有内部碎片;相对于动态分区提高了内存利用率,减少了开销。缺点:存在外部碎...原创 2019-05-23 20:05:31 · 3585 阅读 · 0 评论 -
进程间通信和线程间通信&&进程和线程的区别
进程间的通讯方式管道:管道的传递数据是单向性的,只能从一方流向另一方,是一种半双工的通信方式;只用于有亲缘关系的进程间通信(父子进程);管道他就像一个特殊的文件,但这个文件存在于内存之中,在创建管道时,系统为管道分配两个数据缓冲区,一个用来读数据,一个用来写数据,所以叫半双工。 信号:在原理上,一个进程收到一个信号和收到一个中断请求差不多。信号是异步的,一个进程不必通过任何操作来等待信号的到...原创 2019-05-14 21:16:44 · 1168 阅读 · 0 评论 -
在浏览器中输入网址,回车会发生什么?
在浏览器中输入网址查找一般会分为一下几个步骤:DNS域名解析 TCP连接 发送HTTP请求 服务器处理请求并返回HTTP报文 浏览器显示页面 TCP断开连接一、DNS域名解析 当你在浏览器中输入一个网址的时候,这个网址其实并不是真正意义上的网址。互联网上唯一标识一台计算机的标识是IP地址,DNS域名解析的作用就是把网址转换成IP地址。在这里一般来说会先查找本地...原创 2019-04-16 18:30:04 · 382 阅读 · 0 评论 -
4G虚拟地址空间
什么是4G虚拟地址空间?在多任务操作系统中,每个进程都运行于自己的内存中。这个内存就是虚拟地址空间,在32位系统下它是一个4G的内存地址快,内核空间和用户空间所占的比例是1 :3,还有128M的低地址空间有操作系统独享,不被任何进程访问。其实虚拟地址空间是内存映射出来的存放地址的集合。详细看下图:.text 存放代码的指令段 它的属性是可执行可读不可写。.d...原创 2019-03-19 18:52:27 · 1385 阅读 · 0 评论 -
osi七层模型和各层用到的协议
osi模型的7层结构:应用层->表示层->会话层->传输层->网络层->数据链路层->物理层如果说分成5层的话:应用层->传输层->网络层->数据链路层->物理层这几层结构每一层完成不同的功能,通过若干协议来实现,上层的协议使用下层协议提供的服务。每一层用到的协议如下图所示:数据链路层:实现了网卡端口的网络驱动程序,以处理...原创 2019-03-18 20:10:37 · 3861 阅读 · 0 评论 -
进程间通信——信号、信号的操作、屏蔽信号,捕捉信号详解
信号信号是系统预先编译好的某些特定的事件,信号可以被产生,可以被接收,产生和接收的主体是进程。信号的特点:1.简单 2.携带的信息量少 3.使用在某些特定的场景中信号的状态 1.产生状态 键盘:ctrl + c 命令:kill 系统函数 :kill() 软条件:定时器 2.未决状态 等待被处理,没有处理之前就是未决状态 3...原创 2019-07-30 21:22:31 · 958 阅读 · 0 评论 -
linux线程的创建与使用
创建进程的函数函数原型: int pthread_create( pthread_t *thread, //线程ID=无符号长整形 const pthread_attr_t *attr, //线程属性 void *(*start_routine)(void*), //函数指针...原创 2019-08-03 14:05:22 · 9143 阅读 · 0 评论 -
守护进程详解
1.守护进程的概念:系统中的后台进程,周期性的执行某些任务,或者等待某个事件的发生,不会随用户的注销而退出特点:后台服务进程,不会显示在终端,除了关机和kill,守护进程是不会死的 独立于控制终端 周期性执行某任务 不受用户登录注销影响 守护进程一般采用以d结尾的名字(服务)2.进程组 1.进程组的长?...原创 2019-07-31 14:57:13 · 2635 阅读 · 2 评论 -
线程同步之死锁
什么是死锁呢? 死锁就是多个进程或者线程访问同一个资源的时候,谁也抢不到资源,谁也不退让让其他进程或者线程访问,用户看到的就是程序卡住了。举个例子吧,在一个没有红绿灯的十字路口,来了四辆小汽车,每个路口都只能让一个汽车通过。现在这种情况四辆车都过不了汽车,这就发生了死锁。发生死锁的原因?第一种情况是重复加锁,在这种情况下,第二个锁到来的时候,发现有锁了,那就...原创 2019-08-04 13:33:19 · 118 阅读 · 0 评论 -
线程同步之互斥锁
互斥锁是我们用来解决线程同步的一种常用方法,它的头文件在#include<pthread>中1.互斥锁的创建pthread_mutex_t mutex;2.创建完成之后需要初始化pthread_mutex_init( pthread_mutex_t* mutex; const pthread_mutexattr_t att...原创 2019-08-04 14:08:35 · 248 阅读 · 1 评论 -
线程同步之读写锁
1.读写锁是几个锁? 一个锁。pthrad_rwlock_t lock;2.读写锁的类型 读锁:对内存做读操作 写锁:对内存做写操作3.读写锁的特性 线程A加读锁成功,又来三个线程做读操作,可以加锁成功 多个线程在读的时候可以共享,可以并行去处理 线...原创 2019-08-04 14:19:30 · 205 阅读 · 0 评论 -
静态库和共享库的区别
1. 什么是库?预先编译好的集合就是库。根据连接时期不同,库分为静态库和共享库。静态库是在程序编译时期链接的,动态库是在程序运行时期链接的。linux上库的命名一般位libxxx.a(静态库)libxxx.so动态库,库文件存放的地点位/lib或者/usr/lib。2.静态库的生成<1>.将所有.c文件编译成.o文件 命令是 gcc -c main.c ...原创 2019-01-16 20:35:22 · 2054 阅读 · 0 评论 -
进程详解和fork复制
进程进程:一个正在执行的程序,为了方便操作系统管理,每个进程都有一个PCB(进程控制块),在Linux中称之为进程描述符,通过进程控制块PCB,struct tast_struct结构体来记录进程的信息。进程的信息宝库,进程标识符pid,优先级,进程状态,程序计数器,程序上下文,信号等等。进程的状态:就绪态,运行态,阻塞太 就绪:所有资源都已将准备完成,等待cpu的调用...原创 2019-07-22 18:57:08 · 278 阅读 · 0 评论 -
Linux最常用的命令
文件查看的命令cat file 从第一个字节开始正向查看文件的内容 more file查看文件更多的内容 less file 与more file相似,支持向后浏览,方向键上下翻页,q键退出 空格键 显示文本的下一屏内容 head -2 file 查看一个文件的前两行 tail -2 file 查看一个文件的后两行 find 用来在指定目录下查找文件 grep 文本搜索工具进程...原创 2019-01-18 14:12:30 · 111 阅读 · 0 评论 -
生成可执行程序需要经过那些过程?
生成可执行程序一共需要分四个过程,从预编译->编译->汇编->链接一共四个步骤,那在这四个步骤中到底做了一些什么事情呢?预编译预编译主要处理代码中以#开头的预编译指令,其编译的规则如下:删除所有的#define,展开所有的宏定义 处理所有的预编译指令,例如:#f、#ifend等 处理#include预编译指令,将文件内容替换到它的位置,这个过程是递归进行的,文件包...原创 2019-03-15 17:23:17 · 2613 阅读 · 0 评论