自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(104)
  • 收藏
  • 关注

原创 多路复用

IO模型介绍​ 1、阻塞IO:scanf/printf fread/fwrite read/write cin/cout​ 2、非阻塞IO:recv/send QT中的read、write​ 3、多路复用IO:使用单进程(单线程)监控多个文件的读写模型,更多情况下使用在网络通信上​ 除此之外还有信号驱动IO、异步IO多路复用​ 使用单进程(单线程)监控多个文件描述符的IO模型,多用于网络编程时服务端程序为若干客户端提供服务。​ 优点:​ 1、不需要频繁创建线程、进程和销毁线

2021-03-27 21:18:58 802

原创 SQL数据库多表查询(内附一张数据库表脚本)

构建数据表数据库表练习脚本1、把dome.sql脚本复制到ubuntu系统的主目录下。2、进入MySQL数据库,并选择testDB数据库。3、使用source doem.sql 执行脚本,第一次执行会出现删除表失败的提示,属于正常现象,因为你数据库中没有这些表。s_customer客户表s_dept部门表s_emp员工表s_image图片表s_inventory库存表s_item项目表s_longtext文件表s_ord业务表

2021-03-20 19:33:51 464

原创 SQL数据库中的函数操作

SQL语句中使用的函数其实是数据库自己经实验的一些功能,不同版本的数据库实现的函数差别很大,因为它们不是标准的SQL语句。1、行函数​ 每一条记录就会有一个结果数值函数:round(num,n) 把数据四舍五入为指定位数的小数。truncate(num,y) 截取数据小数点y位前的值,与round的区别是不会四舍五入。floor(num) 向下取整,丢弃小数点后面的数据。ceil(num) 向上取整数,把该数据处理成大于等于它的最小的整数。abs(num) 返回num绝对值pow(n

2021-03-20 19:32:29 384

原创 c++实现log日志文件

1、在项目的运行过程中需要记录或现实代码的执行流程和错误信息,但在不同的阶段需要的功能不同:调试阶段:需要在屏幕显示执行过程和错误信息运营阶段:需要在文件中记录下来执行过程和错误信息2、根据错误原因一般段错误分为收下四个等级:致命错误 LOG_FATAL警告 LOG_WARNING错误 LOG_ERROR提示信息 LOG_INFO3、如何实现文件和终端都可写入的?因为在Linux系统下一切皆文件,终端的文件指针就是stdout。使用fprintf和FILE可以实现既可以现实到屏幕,也

2021-03-19 17:25:08 2261

原创 C++手撕一个线程池

线程池总体流程线程池:一次性创建多个子线程,主线程(生产者)负责接收客户端的链接并创建socket对象然后加入到仓库中,然后子线程(消费者)从仓库中获取socket对象进行服务,当客户端退出时,子线程不销毁而是继续从仓库中获取下一个socket对象进行服务。这种网络编程的优点是限制客户端的链接数量,不需要创建销毁线程,节约了线程销毁和创建的时间,同时空闲的线程会进入休眠,不会与工作线程竞争。所以它的应用范围更广,编程难度更高。线程池中的主线程抓取任务到仓库和子线程消费任务的模块,与消费者与生产者模型非

2021-03-19 15:58:32 434 1

原创 SQL数据库入门(增删改查)

一、数据库介绍1、为什么需要数据库​ 由于计算机的内存资源有限且掉电后会丢失,因此需要把程序中用到的数据保存下来以便于关机后还能继续使用,而保存数据最简单的方式就是把数据以文件形式写入到磁盘当中,我们把这个过程叫做数据持久化。​ 但随着程序的功能越来越复杂,数据量越来越大,管理数据就成了大问题,因为读写文件并解析出数据需要大量的重复操作,并且从海量的数据中快速找出指定的数据需要复杂的逻辑。​ 如果程序各自实现自己的读写数据的代码,一方面效率低且容易出错,另一方面是每个程序访问数据的接口不同,代

2021-03-19 15:20:37 123

原创 Ubuntu数据库环境搭建

1、确保ubuntu系统能正常上网,使用浏览器确认。2、更新软件源sudo apt-get update3、安装数据库及相关软件包sudo apt-get install mysql-server 安装过程中设置root用户的密码为123456sudo apt-get install mysql-client 安装访问数据库的客户端sudo apt-get install libmysqlclient-dev 安装访问数据库的代码库4、配置数据库的字符集和开启网络连接sudo vim /

2021-03-19 15:18:52 397

原创 C++类的继承方式与特点,不同继承方式对成员的影响

一、类的继承​ 1、当面临一个问题时,现在的类的是否能解决部分问题,如果可以则把现在的继承后再进行拓展,来缩短解决问题的时间、降低解决问题的难度(继承就是为了代码复用)。​ 2、当面临的问题比较复杂时,可以把问题分层,每层设计一个类,然后在通过继承进行汇总,最终得到一个可以解决问题的类,以此降低解决问题的难度。二、继承的基本语法1、继承表​ 一个类可以继承多个类,被继承的类叫做父类(基类),继承者叫子类(派生类),每个父类都可以有不同的继承方式。class 子类:继承方式1 父类1,继承方式2

2021-01-21 19:55:15 644

原创 C++中构造函数和析构函数是否可以是虚函数,为什么?

构造函数和析构函数是否可以是虚函数,为什么?1. 为什么构造函数不能为虚函数?虚函数的调用需要虚函数表指针,而该指针存放在对象的内容空间中;若构造函数声明为虚函数,那么由于对象还未创建,还没有内存空间,更没有虚函数表地址用来调用虚函数——构造函数了。2. 为什么析构函数可以为虚函数,如果不设为虚函数可能会存在什么问题?首先析构函数可以为虚函数,而且当要使用基类指针或引用调用子类时,最好将基类的析构函数声明为虚函数,否则可以存在内存泄露的问题。举例说明:子类B继承自基类A;A *p = new B

2021-01-21 19:52:08 986

原创 PAT 乙级 1013 数素数 (20分)

PAT 乙级 1013 数素数 (20分)令Pi表示第i个素数。现任给两个正整数M <= N <= 10^4,请输出PM到PN的所有素数。输入格式:输入在一行中给出M和N,其间以空格分隔。输出格式:输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。输入样例:5 27输出样例:11 13 17 19 23 29 31 37 41 4347 53 59 61 67 71 73 79 83 8997 101 103#include <i

2021-01-11 20:42:06 78

原创 C++各类运算符的重载(单双目、输入输出、前++、后++)

一、运算符重载​ 在C++中会把运算符当做函数来处理 ,当我们使用运算符时,编译器其实是把运算符翻译成函数,由于C++支持函数重载,所以C++中的运算符也是可以重载的,这样可以对类对象进行定制操作,从而简化操作、提高代码的可读性,如:string类就是一个支持众多运算符的字符串类。​ A a,b;​ 当对象支持+运算符时:a+b;成员函数:const A& operator+(cosnt A& b);全局函数:const A& operator+(const A&

2021-01-11 19:36:54 1411 1

原创 C++类中static修饰的静态成员与单例模式(饿汉、懒汉模式的实现)

一、静态成员静态成员变量被static修饰过的类成员变量,叫静态成员变量,这成员变量的特点是存储空间为bss段或data段,该变量只会被创建出一份,为所有类对象共享。静态成员变量属于类,而不是某个类对象。静态成员变量的声明与定义:​ 在类中静态成员变量仅仅是声明,定义、初始化必须在类外,定义时不再需要static关键字。格式:类型 类名::变量名注意:静态成员变量依然受访问控制符的限制,private/protected权限的静态成员变量依然只能在类内访问,public

2021-01-11 19:31:04 787

原创 C++基础知识之类中const修饰的常函数

常函数定义​ 在函数的参数列表和函数体之间加使用const修饰的函数,这种叫做常函数,该const修饰的就是this指针。特点​ 不能在常函数内修改成员变量的值,普通类对象可以调用常函数,普通成员函数也可以调用常函数,但是常函数只能调用常函数。​ 如果在常函数中真的修改某个成员的值,那么该成员需要用mutable修饰。注意:常对象只能调用常函数,不能调用普通的成员函数。#include <iostream>using namespace std;class Test

2021-01-11 19:26:48 118

原创 参照string类,实现一String类的构造函数、析构函数、拷贝构造、赋值。

参照string类,实现一String类的构造函数、析构函数、拷贝构造、赋值。#include <iostream>#include <string.h>using namespace std;class String{ char* c_str;public: String(const char* str) { c_str = new char[strlen(str)+1]; strcpy(c_str,str); } ~String(void)

2021-01-11 19:13:30 150

原创 C++成员函数是如何区别那个对象在调用它?

this指针​ 类的成员函数存储在代码段中,类的成员变量存储在每个类对象中,所有类对象共享一份成员函数。​ 成员函数是如何区别那个对象在调用它?​ 当使用类对象调用成员函数时,编译器会把对象的地址隐式传递给成员函数,每个类成员函数都隐藏着一个参数this指针​ 在成员函数中之所以能直接访问成员变量就是隐藏着this指针,当在成员函数中调用其它成员函数时,也会把this指针传递过去。注意:this指针是隐藏的,但也可以显示地使用C++类中的静态成员函数和友元是没有隐藏的this指针的

2021-01-11 19:06:39 640

原创 C++类四大隐藏函数详解(构造函数、析构函数、拷贝构造、赋值函数)

构造函数传送门一、析构函数1、什么是析构函数​ 与构造函数一样也是一种特殊的成员函数,它会在对象释放的时候自动调用,负责一些收尾工作,如:保存数据、释放资源等。2、函数格式~类名(void){ }3、析构函数的任务​ 负责释放在构造函数中获取到的所有资源。​ 执行过程:​ 1、先执行析构函数本身代码​ 2、调用成员变量的析构函数​ 3、调用父类的析构函数注意:析构函数与构造函数的执行顺序刚好相反#include <iostre

2021-01-11 19:02:26 1003

原创 面向对象编程,类与对象的详细解答(构造、析构函数)

一、面向对象编程​ 面向过程编程:关注于解决问题的方法、步骤。​ 面向对象编程:关注于谁能解决问题(类),以及解决问题需要的数据(成员变量),以及解决问题需要的技能(成员函数)。​ 抽象:想象出一个能解决问题的对象(观察、想象),分析出解决问题需要的属性(成员变量)和行为(成员函数)。​ 封装:把抽象的结果分装成类(数据类型),并设置上相应的访问权限。​ 使用封装的类实例化对象,调用对象的成员函数与成员变量相互作用达到解决问题的目的。​ 继承:在解决问题之前,先寻找有没有能解决部分问题的类,

2021-01-08 20:00:07 361

原创 如何使用C++中的引用,与指针的区别所在

引用1、什么是引用:引用就是取别名(外号)​ 引用就是用一个新的标识符与另一个标识符的内存建立绑定关系,从而使一块内存对应多个标识符。2、引用的基本特性​ 1、引用必须初始化,也就是必须有引用目标。​ 不存在空的引用,但有可能存在悬空引用(变量已经销毁,但名还留着)。​ 2、可以引用无名对象或临时对象,但必须使用常引用。​ 3、引用不能更换目标​ 引用一旦定义、初始化完成后就和普通变量一样,它就代表了引用目标,一旦引用终身不能更换引用目标(没有这种语法)​

2021-01-05 20:55:36 106

原创 C++中的四种强制类型转换(静态、动态、去常、重解释)

强制类型转换​ C++中有一套更安全的强制类型转换,分别是1、静态类型转换​ static_cast<目标类型>(源类型)​ 源类型和目标类型只要有一个方向可以隐式转换,那么两个方向都可以做静态类型转换,如果不能则报错#include <iostream>using namespace std;int main(int argc,const char* argv[]){ float num = 10; cout << sizeof(static_

2021-01-05 20:54:05 1348

原创 C++中的堆内存管理new/delete

C++的堆内存管理1、在C++中使用new/delete管理堆内存​ 相当于C语言中的malloc/free​ 使用方法:​ new 类型;​ new会自动计算类型所需要的字节数,然后从堆内存申请响应字节数的内存,并返回内存块的首地址(带类型地址)。​ delete 地址;​ 释放堆内存中的内存块;​ 注意:new/delete与malloc/free不能混用,因为new和delete除了管理堆内存还有其他的工作要做。2、数组的分配与释放​

2021-01-05 20:50:09 149

原创 带你掌握C++的重载、内联函数以及与C函数的区别

C++函数与C函数的区别1、函数重载​ 1、什么是函数重载​ 在同一作用域下,形参列表不同的同名函数构成重载关系,且不会冲突​ 调用函数时,编译器会根据实参的数据类型调用合适的函数​ 2、重载实现的机制​ C++代码在编译时函数的参数类型会添加到函数名中,也就是C++的函数名在编译时经历了换名的过程,借助这个方式实现了函数的重载​ 由于C++和C函数的编译机制不同,所以C++代码不能调用C编译器所编译出的函数。​ 3、extern “C” {}​

2021-01-05 20:47:19 201

原创 如何使用C++的名字空间(namespace)

名字空间1、为什么需要名字空间​ 在项目中函数名、全局变量、结构、联合、枚举、宏等,非常有可能有命名冲突,而C++之父设计名字空间就是为了解决这些命名冲突,名字空间可以把这些命名划分到不同的逻辑空间中,从而解决命名冲突。2、定义名字空间namespace name{ 定义变量 定义函数 定义类、结构、联合、枚举}​ 注意:名字空间可以重复,同名的名字空间会自动合并#include <iostream>namespace n1{ int num = 10

2021-01-05 20:37:33 388

原创 轻松了解C++与C语言的不同之处

一、C++介绍​ 贝尔实验室本贾尼·斯特劳斯特鲁普,于1979年在分析linux系统分布内核流量分析时,希望有一个更加模块化的工具,于是他为C语言增加了类的机制(面向对象),于1983年完成了C++的第一个版本。特点​ 1、C++完全兼容C语言的所有内容​ 2、支持面向对象的编程思想(抽象、封装、继承、多态)​ 3、支持函数、运算符重载​ 4、支持泛型编程、模板技术​ 5、支持异常处理机制​ 6、类型检查更严格二、第一个C++程序1、文件扩展名​ .cpp .cc .

2021-01-05 20:28:29 96

原创 PAT 乙级 1012 数字分类 (20分) C语言版

给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:A1 = 能被5整除的数字中所有偶数的和;A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4…;A3 = 被5除后余2的数字的个数;A4 = 被5除后余3的数字的平均数,精确到小数点后1位;A5 = 被5除后余4的数字中最大数字。输入格式每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的正整数。数字间以空格分隔。输出格式对给定的N个正整

2020-12-30 20:56:50 103

原创 基于UDP的网络对战五子棋

网络对战五子棋介绍基于UDP的网络对战五子棋,可以在不同电脑上玩,是之前五子棋的升级版使用说明将server.c放到云服务器中(和client放在一起也能玩)gcc server.c -o server后运行./serverclient.c放在自己操作系统中,gcc client.c -o client后运行./client先运行的client是先手,后运行的是后手,目前只能两个人玩server代码#include <stdio.h>#include <getch.

2020-12-30 19:01:24 497 1

原创 PAT 乙级 1010 一元多项式求导 (25分) C语言版

设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为n*xn-1。)输入格式以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。输入样例3 4 -5 2 6 1 -2 0输出样例12 3 -10 1 6 0分析:1.flag用来判断是否已经有过输出~2.当b!=0时,因为给出的是所

2020-12-29 10:57:27 172

原创 PAT 乙级 1009 说反话 (20分) C语言版

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。输出格式:每个测试用例的输出占一行,输出倒序后的句子。输入样例:Hello World Here I Come输出样例:Come I Here World Hello#include <stdio.h>#incl

2020-12-28 20:36:34 133

原创 PAT 乙级 1008 数组元素循环右移问题 (20分) C语言版

一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN-1)变换为(AN-M …… AN-1 A0 A1……AN-M-1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?输入格式:每个输入包含一个测试用例,第1行输入N ( 1<=N<=100)、M(M>=0);第2行输入N个整数,之间用空格分隔。输出格式:在一行中输出循环右移M位以后的

2020-12-28 17:38:08 107 1

原创 PAT 乙级 1007. 素数对猜想 (20)

PAT 乙级 1007. 素数对猜想 (20)让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。输入格式:每个测试输入包含1个测试用例,给出正整数N。输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。输入样例:20输出样例:4#include <st

2020-12-28 15:30:17 83

原创 PAT 乙级 1005. 继续(3n+1)猜想 (25)

PAT 乙级 1005. 继续(3n+1)猜想 (25)卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对n=3进行验证的时候,我们需要计算3、5、8、4、2、1,则当我们对n=5、8、4、2进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这4个数已经在验证3的时候遇到过了,我们称5、8、4、2是被3“覆盖”的数。我们称一个数列中的某个数n为“关键数”,如果

2020-12-28 14:41:18 76

原创 PAT 乙级 1004. 成绩排名 (20)

PAT 乙级 1004. 成绩排名 (20)读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。输入格式每个测试输入包含1个测试用例,格式为第1行:正整数n第2行:第1个学生的姓名 学号 成绩第3行:第2个学生的姓名 学号 成绩… … …第n+1行:第n个学生的姓名 学号 成绩其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。输出格式对每个测试用例输出2行,第1行是成绩最高学生的姓名和

2020-12-24 16:06:11 72 1

原创 【C语言】网络编程之网上银行(socket、tcp)

此项目为linux 下多进程编程银行小系统(消息队列版本)改进版通过socket套接字以及tcp协议是客户端和服务端可以通过本地网络交互数据之前的消息队列版本:传送门网上银行版本:码云传送门;github传送门总体思路:依旧分客户端(client)和服务端(server)两个端口,将需要传递数据的账户结构体放在bank.h中,tools.c中放一些常用的工具函数。客户端发送数据,包括操作数据类型和实际的账户数据,服务端则根据接收的不同的数据类型,执行不同的操作等,再将结果存入buf字符串发送给客

2020-12-23 16:53:38 788

原创 Windows系统下的socket编程

Windows系统下的socket编程1、winsock2.h,windows系统下使用socket只需要一个头文件2、编译时需要添加ws2_32.lib库,设置->搜索code-runner.executorMap,打开setting.json文件,把C的编译参数修改为:"code-runner.executorMap": { "c": "cd $dir && gcc $fileName -std=gnu99 -lws2_32 -lpthread -o $fileNameW

2020-12-21 18:41:21 1494

原创 【C语言】网络编程之简单聊天室(socket、tcp)

网络聊天室业务逻辑:1、客户端注册名字2、告诉所有的在线的客户端,XXX进入聊天室。3、新建一个线程为该客户端服务,随时接收客户端发送来的内容。4、当收到一个客户端的消息时,向每个客户端都转发一份(群聊)。5、同时在线人数最多50人。注意:任何客户端都应该可以随时进入退出。注意:ip地址需要填写自己的IP地址,有自己的服务器的童鞋可以试用一下自己的云服务器,记得改为自己服务的端口运行:gcc server.c -oservergcc client.c -oclient先运行serv

2020-12-18 19:38:48 5175 5

原创 socket套接字、基于TCP的编程模型与实际运用(网络聊天室)

socket​ 套接字,是一种接口技术,它封装了TCP/IP通信协议,使用它可以让计算机之间通过网络传输数据,所有的操作系统都是基于socket的接口进行网络通信的。​ 不光可以用于网络间通信,还可以用于进程间通信,或者可以理解为不同计算机之间的进程间通信。​ 其实是一个内存对象,以文件描述符的形式呈现,发送数据即写文件,接收数据即读文件int socket(int domain, int type, int protocol);功能:创建一个socket对象domain:地址域,什么类型

2020-12-18 19:16:24 495

原创 计算机网络基础知识详细梳理(MAC地址、IP、TCP/UDP)

一、计算机网络基础知识1.什么是计算机网络​ 把分布在不同地理位置的计算机与专门的网络设备用通信线路互相连成一个规模 大、功能强的系统,从而使众多计算机可以方便地互相传递信息、共享软件、硬件、数 据信息等。​ 计算机网络就是由通信线路互相连接的许多自主工作的计算机构成的的集合,它是 计算机技术和通信技术相结合的产物。2.计算机网络的功能​ 数据通信、资源共享、提高系统的可靠性、分布式网络处理和负载均衡。3.计算机网络的组成1、通信子网网卡:网络接口卡或网络适配器、它负责将数据发送网

2020-12-18 19:10:28 2263

原创 竞争与同步(互斥量、读写锁)

竞争与同步​ 由于线程之间的绝大多数资源都是共享的,当多个线程同时访问一个资源时,可能会出现数据不完整、不一致的情况,此时就需要多个线程协调访问资源(竞争访问,需要用于互斥技术),最终达到数据一致、完整(同步)。互斥量:pthread_mutex_t也叫互斥锁,当互斥量处于锁定状态时,其他线程加锁会处于阻塞状态,只有锁被打开时,被阻塞的线程才能继续执行int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *m

2020-12-18 10:19:53 320

原创 实现一个多线程复制的cp命令。

实现一个多线程复制的cp命令。编译:gcc pthread_cp.c -ocp命令行格式:./cp src dest -tn-tn中n代表通过n个线程来分别复制文件#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include &l

2020-12-16 20:49:17 1133

原创 详细介绍线程的基本概念、属性

线程的基本概念​ 1、线程就是进程的执行路线,是进程内部的控件序列(是进程的一部分)。​ 2、进程系统中的资源单位,而线程是进程的执行单位,进程中至少有一个线程叫主线程。​ 3、线程是轻量级的,没有自己独立的内存资源,如:代码段、全局数据段、静态数据段、堆区、命令行参数、文件描述符、信号处理函数等。​ 4、线程唯一拥有的独立资源是栈内存,也就是线程有自己独立的局部变量、线程ID。​ 5、进程中可以同时拥有多个线程,也就是多个执行路线,其中一个是主线程,进程中的所有线程都在同一个地址空间中活动。​

2020-12-16 20:46:12 1758

原创 进程间通信详解(管道、共享内存、消息队列、信号量)

进程间通信​ 进程之间是相互独立的,多个进程之间如果需要协同工作(多进程),那么进程之间就需要通信(数据交换)。进程间通信的分类1、简单数据通信​ 命令行参数、信号、文件2、传统的进程间通信​ 管道文件、匿名管道3、XSI通信间通信​ 共享内存、消息队列、信号量4、网络进程间通信​ 本地网络:根据网络协议的通信格式,同一个系统内的进程进行通信。​ 网络通信:根据网络协议的通信格式,不同计算机之间的进程通信。管道通信​ 管道是UNIX系统最古老的通信方式,早期管道是半双

2020-12-16 20:42:46 511

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除