
Linux
CXYhh121
这个作者很懒,什么都没留下…
展开
-
【项目】—— 基于websocket协议的网页版群聊系统
使用开源websocket和mongoose框架编写网页版本的群聊即时通信工具使用HTTP+mongoose+session+MySQL+jsoncpp的技术构成,完成IM工具原创 2019-08-06 20:35:54 · 1275 阅读 · 0 评论 -
【项目】—— 语音小管家Sosuke
项目简介借助图灵机器人和百度语音识别和合成等第三方平台和第三方工具使用C++编写一个智能AI对话和语音命令执行的语音管理工具除去交流功能之外还可以执行Linux下相关命令,可执行的命令支持自己配置项目技术点C++ STL中主要是map和unorder_map的使用了解http第三方库,使用http中的post接口进行http请求通过图灵机器人API接口将机器人接入Linux平台...原创 2019-07-31 18:37:38 · 1437 阅读 · 0 评论 -
【Linux】—— 进程间的通信之匿名管道
进程间的通信一、进程间通信的概念进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资源的分配和释放。可以认为进程是一个程序的一次执行过程。进程的地址空间是相互独立的,一般而言是不能相互访问的,若读者不了解进程地址空间相关概念,可参考博客 进程地址空间 。但很多情况下进程间需要互相通信,来完成系统的某项功能。进程通过与内核及其它进程之间的互相...原创 2019-06-03 21:10:39 · 412 阅读 · 0 评论 -
【Linux】—— Linux中进程信号1
信号的概念生活中的信号为了理解一下信号这个概念,我们来举一些生活中的例子比如:你在淘宝上买了一件商品,你在等这些商品来,虽然这些商品没有来,但是你却知道他来了之后你应该怎么做。之后当我收到快递公司给我通知我们的快递到了之后,我们有些人会立刻去拿,有的可能选择过一会去拿,我们可以理解为"在合适的时间去完成取快递这件事"再举个栗子,平时我们睡觉之前会设置一个闹钟,定时叫我们起床,虽然这个闹钟...原创 2019-07-07 17:58:05 · 287 阅读 · 2 评论 -
【Linux】—— Linux进程信号2
进程信号我们在 Linux进程信号1中学习了什么是进程信号,信号如何产生等,今天我们继续学习一些关于进程信号相关的知识在目的进程中安装信号我们在谈安装信号之前必须了解操作系统处理信号的办法,我们之前也提到过操作系统处理信号有三种方法,执行默认操作,执行自定义操作,忽略现在我们来谈谈什么叫做信号的安装:在目的进程安装该信号,即设置如果目标进程捕获该信号时执行的操作代码。Linux采用...原创 2019-07-16 11:15:25 · 329 阅读 · 0 评论 -
【Linux】—— 线程基本概念
Linux线程概念什么是线程在讲线程之前我们来看一幅图,这个我们应该都不陌生,这个就是我们的进程PCB通过页表+MMU完成虚拟地址到物理地址的映射。接着我们看一下线程,我们之前提到线程是在进程的程序地址空间中运行的,从下图中我们就可以看出来此时并不像上图那样一个PCB指向一个程序地址空间,而是多个PCB指向一个地址空间,这样也就意味着这些PCB共享一个进程地址空间,但是在CPU眼中依然看到...原创 2019-07-18 21:17:11 · 222 阅读 · 0 评论 -
【Linux】—— Linux线程互斥
Linux线程互斥前面我们在 Linux线程基本概念 介绍了线程基本概念,在Linux线程控制中介绍了线程创建,线程终止,线程等待,线程分离等等概念,今天我们来介绍一下线程互斥的相关概念线程并发带来的问题互斥概念我们之前在 进程间通信之匿名管道 讲管道相关概念时我们提到了一些与进程线程间互斥相关的背景概念,我们今天站在线程的角度来回忆一下临界资源:多线程执行流共享的资源叫做临界资源临...原创 2019-07-24 11:43:55 · 731 阅读 · 0 评论 -
【Linux】—— 基于阻塞队列的生产消费者模型
在我们介绍今天的内容之前我们先了解一些相关的概念Linux线程基本概念Linux线程控制Linux线程互斥Linux线程同步接下来我们进入今天的主题生产者消费者模型生产者消费者模型生产者消费者模型概念321原则:3种关系,2类角色,一个交易场所3种关系是:生产者与生产者之间的关系,消费者与消费者之间的关系,生产者与消费者之间的关系2类角色是:一类为生产者,一类为消费者一个交...原创 2019-07-19 17:32:22 · 310 阅读 · 0 评论 -
【Linux】—— vim下如何批量注释和反注释
之前我们在Linux下vim的使用及配置介绍了vim下一些简单的操作,今天我们来介绍一下一些能让敲代码变得更简便的操作vim下进行批量注释和取消注释批量注释首先我们需要在vim的正常模式下按v进入virtual(可视)模式下 接下来我们通过按上下左右键选择我们需要注释的行选择好注释的行之后我们我们按住ctrl + v 进入可视块模式接着我们我们按shift + i其实就是大写...原创 2019-07-17 17:11:19 · 757 阅读 · 0 评论 -
【Linux】—— Linux线程控制
Linux下线程的控制创建线程由于Linux下不可以像创建进程一样直接用命令创建线程,因此这里我们得先介绍一下POSLX线程库POSLX线程库与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以 pthread_ 打头的要使用这些函数库,要通过引入头文件<pthread.h>链接这些线程函数库时要使用编译器命令的-lpthread选项创建线程函数原型...原创 2019-07-20 19:18:04 · 310 阅读 · 0 评论 -
【Linux】—— Linux线程同步
Linux线程同步前面我们在Linux线程基本概念 介绍了线程基本概念,在Linux线程控制中介绍了线程创建,线程终止,线程等待,线程分离等等概念,在Linux线程互斥 中介绍了互斥量这一重要的概念,那今天我们接着认识我们线程,介绍一下线程同步相关的概念同步的概念我们前面在线程互斥介绍了互斥这一概念,互斥简单的来说就是某个时刻只允许一个线程访问临界资源,那我们来举个栗子说明一下我们为什么在...原创 2019-07-25 17:45:25 · 240 阅读 · 0 评论 -
【Linux】—— 线程池的概念及实现
前面我们介绍了线程相关的所有概念,根据之前的所学的概念,接着我们看一下下面这张图线程生命周期,一个线程从生到死的过程线程池以上介绍我们可以看出,在一个应用程序中,我们需要多次使用线程,也就意味着,我们需要多次创建并销毁线程。而创建并销毁线程的过程势必会消耗内存。而在C++中,内存资源是及其宝贵的,计算机的大佬们就提出了线程池的概念。线程池:一种线程使用模式。线程过多会带来调度开销,...原创 2019-08-01 11:08:05 · 275 阅读 · 1 评论 -
【Linux】—— 基于信号量的生产者消费者模型
信号量前面我们在基于阻塞队列的生产者消费者模型 今天我们来看一下基于信号量的生产者消费者模型,也可以说是基于环形队列的。POSIX信号量POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。 但POSIX可以用于线程间同步初始化信号量#include <semaphore.h>int sem_init(sem_t *sem, int...原创 2019-07-27 18:51:12 · 689 阅读 · 0 评论 -
【Linux】—— Linux读写者模型
读写者模型读写锁在编写多线程的时候,有一种情况是十分常见的。那就是,有些公共数据修改的机会比较少。相比较改写,它们读的机会反而高的多。通常而言,在读的过程中,往往伴随着查找的操作,中间耗时很长。给这种代码段加锁,会极大地降低我们程序的效率。那么有没有一种方法,可以专门处理这种多读少写的情况呢? 有,那就是读写锁读写锁接口设置读写优先初始化销毁加锁和解锁读写者模型源码展示...原创 2019-07-28 16:06:09 · 210 阅读 · 0 评论 -
【Linux】——进程间的通信之命名管道
前面博客我们讲述了进程间的一种通讯方式 匿名管道 今天我们来讲一下进程间的另一种通讯方式 命名管道命名管道1.什么是命名管道匿名管道是在缓存中开辟的输出和输入文件流的空间,只能用于父子关系的进程之间。因为父子进程的输入和输出文件描述符是一致的。命名管道是一种实际存在的FIFO文件,称作 管道文件,属于一种特殊类型的文件,用于不同进程之间,命名管道进程间打开同一个FIFO文件,进行数据传递...原创 2019-06-06 17:12:49 · 246 阅读 · 0 评论 -
【Linux】—— 进程的通信之system V
前面讲述了进程间通信的两种方式 匿名管道 和 命名管道 今天我们继续来看看进程间通信的其他方式system Vsystem V共享内存共享内存,听名字就知道他是一块内存,这块内存一定是可以被俩个进程同时看到的临界资源,正如我们所想的,这块内存被开辟在物理内存上,然后通过页表映射到各个进程的虚拟地址空间的共享内存段,就像我们下图中所画的那样。共享内存是system V进程间通信速度最快的...原创 2019-06-12 19:06:16 · 642 阅读 · 0 评论 -
【Linux】—— Linux权限理解
Linux下有两种用户:超级用户(root)、普通用户。超级用户:可以再在inux系统下做任何事情,不受限制普通用户:在linux下做有限的事情。超级用户的命令提示符是“#”,普通用户的命令提示符是“$“。命令:su [用户名]功能:切换用户。例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(roo...原创 2019-04-05 17:19:07 · 319 阅读 · 0 评论 -
【Linux】—— Linux编辑器-vim使用及配置
一、vim的基本概念vim的三种模式命令模式(command mode):也称为普通模式,正常模式(Normal mode),进入vim后默认是普通模式,在该模式下可进行的操作是控制屏幕光标的移动,字符、字或行的删除,移动复制某区段。进入插入模式Insert mode下和底行模式last line mode都必须在命令模式下进行。插入模式(Insert mode):只有在Insert mo...原创 2019-04-06 22:31:31 · 1107 阅读 · 7 评论 -
【Linux】—— os概念,定位
使计算机更好用!这是操作系统的根本定义学习Linux需要记住的4句话1、操作系统是软硬件资源管理的软件2、管理者是根据被管理者数据进行管理相关决策的3、一般而言,管理者和被管理者之间不直接沟通,所以管理者(操作系统)与被管理者(软硬件)之间必须有一个执行者(设备驱动)的角色4、操作系统对下要管理好软硬件,对上要为用户提供良好的执行环境...原创 2019-03-28 17:09:35 · 438 阅读 · 0 评论 -
【Linux】——编辑器gcc/g++和调试器gdb的使用
Linux编辑器gcc/g++的使用1、背景知识编译的四个阶段预处理阶段:宏替换,展开头文件,条件编译,去掉注释编译阶段:检查程序中的语法错误,给出警告,生成汇编代码等汇编阶段:将汇编代码转换为机器可执行的二进制代码链接阶段:将所有文件链接成单一可执行文件或是库文件2、gcc如何完成编译格式 gcc [选项] 要编译的文件 [选项] [目标文件]预处理(进行宏替...原创 2019-04-08 19:47:13 · 791 阅读 · 0 评论 -
【Linux】—— 深入了解操作系统之进程
冯诺依曼体系结构输入单元:包括键盘, 鼠标,扫描仪, 写板等中央处理器(CPU):含有运算器和控制器等输出单元:显示器,打印机等关于冯诺依曼,必须强调几点:这里的存储器指的是内存不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。一句话,所有设备都只能直接和内存打交...原创 2019-04-20 19:16:04 · 282 阅读 · 0 评论 -
【Linux】—— 进程状态及优先级
进程状态为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。一个进程可以有几个状态(在Linux内核里,进程有时候也叫做任务)。下面的状态在kernel源代码里定义:/** The task state array is a strange "bitmap" of* reasons to sleep. Thus "running" is zero, and* you can...原创 2019-04-23 15:57:43 · 1921 阅读 · 2 评论 -
【Linux】—— 程序or进程地址空间
程序地址空间一、引入最早的时候,计算机还没有虚拟机制,程序指令所访问的内存地址就是物理内存地址,所以就要将所有程序都加载到内存中,但是我们实际的物理内存只有4G。所以就会出现一些问题:当多个程序需要运行时,必须保证这些程序用到的内存总量要小于计算机实际的物理内存的大小。内存使用效率低,内存空间不足,就需要将其他程序展示拷贝到硬盘当中,然后将新的程序装入内存。然而由于大量的数据装入装出,内...原创 2019-05-05 18:16:37 · 319 阅读 · 0 评论 -
【Linux】—— 进程的控制
进程的创建1、fork函数在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。进程调用fork,当控制转移到内核中的fork代码后,内核做:分配新的内存块和内核数据结构给子进程将父进程部分数据结构内容拷贝至子进程添加子进程到系统进程列表当中fork返回,开始调度器调度我们来看一段程序具体了解一下fork()程序运行结...原创 2019-05-14 20:34:26 · 384 阅读 · 0 评论 -
【Linux】——实现一个简单shell(命令行解释器)
进程替换替换原理用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变替换函数其实有六种以exec开头的函数,统称exec函数: #in...原创 2019-05-21 11:53:11 · 10931 阅读 · 4 评论 -
【Linux】—— Linux下的基础IO
C语言下的文件先来段代码回顾C文件接口在之前的博客 浅谈与文件相关的几种函数我们讲解了一些与文件相关的函数以及他们的用法,有兴趣的读者可以进行阅读。在c语言中我们向一个文件中写入数据使用的是fwrite函数:#include <stdio.h>#include <string.h>int main(){ FILE *fp = fopen("myfile...原创 2019-05-25 11:31:20 · 174 阅读 · 0 评论 -
【Linux】—— Linux下的文件缓冲区
缓冲区机制根据应用程序对文件的访问方式,即是否存在缓冲区,对文件的访问可以分为带缓冲区的操作和非缓冲区的文件操作:a)带缓冲区文件操作:高级标准文件I/O操作(eg:C库定义的fwrite和fread已经printf函数),将会在用户空间中自动为正在使用的文件开辟内存缓冲区。b)非缓冲区文件操作:低级文件I/O操作(eg:系统接口read和write),读写文件时,不会开辟对文件操作...原创 2019-05-26 16:44:27 · 1347 阅读 · 0 评论 -
【Linux】 —— 在Linux下创建自己动态库和静态库
我们在学习 Linux编译器gcc/g++ 时也提到了动态库和静态库,但是当时我们只是简单的介绍了一下他们的概念,以及二者的优缺点,今天我们先来简单的回顾一下什么是静态库,什么是动态库,再来学一下怎么打包一个静态库和动态库动态库和静态库静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库动态库(.so):程序在运行的时候才去链接动态库的代码,多...原创 2019-05-30 17:38:24 · 596 阅读 · 1 评论 -
【Linux】—— 深入理解文件系统
Linux文件系统文件结构我相信很多人都听过这么一句话:在Linux系统中有一个重要的概念:Linux下一切皆文件。其实这是UNIX哲学的一个体现,而Linux是重写UNIX而来,所以这个概念也就传承了下来。在UNIX系统中,把一切资源都看作是文件,包括硬件设备,其实就是为了方便管理。UNIX系统把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问。...原创 2019-05-28 11:56:06 · 1216 阅读 · 0 评论 -
【Linux】—— Linux基础命令
Linux基础命令一、目录操作命令:1 、ls 浏览目录命令目录–文件夹, 列出目录下的文件信息-a 命令:浏览所有文件,不忽略以.开头的文件 ,查看隐藏文件linux下以 . 开头的文件默认是隐藏文件一个点表示当前路径两个点表示当前路径的上一层路径-l 命令: 查看目录下文件的详细信息,文件类型:- 为普通文件 d为目录文件2、pwd 查看当前所在路径绝...原创 2019-03-11 20:30:16 · 1100 阅读 · 0 评论