
Linux
blog_zhangxu
美好的年华,别让自己失望
展开
-
Linux Vim插件管理器Vundle安装和使用
Vundle是vim的一个插件管理器, 同时它本身也是vim的一个插件。插件管理器用于方便、快速的安装、删除、Vim更新插件。vim Vundle插件官方地址:https://github.com/VundleVim/Vundle.vim步骤1、下载Vundle插件(一)使用"yum -y install git"安装git命令(二)输入指令mkdir -p ~/.vim/bundlegit clone https://github.com/gmarik/Vundle.vim.gi.原创 2020-08-04 16:06:53 · 1006 阅读 · 0 评论 -
Linux动态库与静态库的创建和使用
编译过程提及动态库与静态库,那么我们首先就要来说一下在我们Linux下程序的编译过程预处理 ( -E )(a) 头文件展开(文本复制)(b)进行宏替换©条件编译(d)去掉注释编译 ( -S )语法语义纠错,无误后将源代码文件转换成汇编代码文件汇编 ( -c )将汇编代码转换成二进制机器代码链接将所有得到的目标文件和依赖的库文件进行汇总...原创 2019-04-13 14:22:36 · 551 阅读 · 0 评论 -
Linux进程间通信之共享内存
共享内存共享内存是我们进程间通信最快的一种方式,那么为什么可以这样说呢?那么咱们先来看看共享内存的通信原理。上图是我画的利用共享内存通信的示意图。其实看了图我想你应该就明白共享内存通信是怎么一回事了基本思想:多个进程通过将同一块物理内存映射到自己的虚拟地址空间中,实现了多个进程可以对同一块物理内存进行操作,通过这种方式我们就实现了数据共享的功能。为什么利用共享内存通信最快那么为...原创 2019-04-24 14:50:29 · 332 阅读 · 0 评论 -
Linux进程间通信之消息队列与信号量
消息队列基本概念:消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。消息队列是双向通信,传输的是有类型的数据块,它的本质是内核中的优先级队列。消息队列的实现包括创建或打开消息队列、添加消息、读取消息和控制消息...原创 2019-04-24 15:23:12 · 879 阅读 · 0 评论 -
Linux进程信号
信号信号概念:信号就是一个软件中断,它是用来通知某件事情的发生,打断当前操作,选择合适的时机,去处理信号。信号功能:通知事件的发生使用命令查看信号: kill -l在Linux下,我们共有62种信号1~31 : 继Unix而来的非可靠信号,也叫非实时信号(信号有可能会丢失)34~64 :可靠信号 ,也叫实时信号(信号不会丢失)信号的声明周期产生->信号在进程种注...原创 2019-04-24 16:09:33 · 200 阅读 · 0 评论 -
你的线程真的安全吗?—— 线程安全与锁机制
问题引入上篇我们谈论了线程的基本的概念,线程控制原语,以及多线程与多进程之间的区别。提到进程我们就不得不说线程,提到线程那么势必就会谈及线程安全。 ,因为它非常的重要。为什么这么说呢?我们举个例子,如下:举例: 有一位大婶去银行存款5000元 。卡里本来余额还有5000元,银行小姐姐查询余额后发现还有5000元,这时候银行小姐姐要将大婶的5000元改成10000元,就在这时候大婶眼疾手快...原创 2019-05-15 11:53:00 · 677 阅读 · 0 评论 -
条件变量与POSIX信号量及生产者消费者模型
引入上篇我们详细的介绍了一下Linux下线程安全以及锁机制,利用互斥锁实现了线程间的互斥,那么线程同步( 在保证数据安全的前提下,让线程能够按照某种特定的顺序访问临界资源,从而有效避免饥饿问题,叫做同步。生产出来,才能使用,保证临界资源的合理访问)到底该如何实现呢?这就是我和大家接下来要讨论的条件变量。条件变量概念: 条件变量本身不是锁,但是它可以造成线程阻塞。没有资源则等待,生产资源后...原创 2019-05-15 17:18:48 · 492 阅读 · 0 评论 -
Linux之线程细究~~~~
线程一、线程基本概念 首先要说的就是在我们Linux下并不存在真正的线程,在Linux下,线程采用进程模拟实现的。当我们在单个进程中需要处理多个任务时,又不能创建多个进程,这时我们就引入了线程的概念。在Linux下,由于线程是用进程实现的,所以我们也罢线程叫做 轻量级进程 (LWP:light weight process),它的本质仍是进程。进程其实就是一个线程组,其中包含一个或者多个线程...原创 2019-05-12 00:14:35 · 187 阅读 · 0 评论 -
网络基础概念
导入在计算机网络学习中我觉得比较重要的就是网络协议的学习。网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。因为不同用户的数据终端可能采取的字符集是不同的,两者需要进行通信,必须要在一定的标准上进行。一个很形象地比喻就是我们的语言,我们天朝大国人多地广,地方性语言也非常丰富,而且方言之间差距巨大。A地区的方言可能B地区的人根本无法接受,所以我们要为全国人名进行沟通建立一个...原创 2019-05-30 11:05:29 · 594 阅读 · 0 评论 -
网络套接字编程(socket 详解)
socket 编程套接字概念Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字。与管道类似的,Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致。区别是管道主要应用于本地进程间通信,而套接字多应用于网络进程间数据的传递。在T...原创 2019-06-09 22:54:39 · 16589 阅读 · 0 评论 -
HTTP协议简介
应用层基础概念应用层就是在应用程序之间进行数据交换,我们平时写的一个个应用程序解决一个个实际问题,满足日常需求的网络程序,都是在应用层。应用层常见协议HTTP协议——超文本传输协议FTP协议——文件传输协议SMTP协议——简单邮件传输协议DNS协议——域名解析协议应用层有好多协议,都是由我们程序员自己处理的,在这些协议中,我们最常用的就是HTTP协议,那么接下来就让我们一起来看...原创 2019-07-09 15:56:10 · 1241 阅读 · 0 评论 -
UDP/TCP常见面试题
为什么需要第三次握手?如果没有第三次握手,可能会出现如下情况:如果只有两次握手,那么server收到了client的SYN=1的请求连接数据包之后,便会分配资源并且向client发送一个确认位ACK回复数据包。那么,如果在client与server建立连接的过程中,由于网络不顺畅等原因造成的通信链路中存在着残留数据包,即client向server发送的请求建立连接的数据包由于数据链路的拥塞或...原创 2019-07-11 00:10:15 · 811 阅读 · 0 评论 -
UDP与TCP协议简介
前言本节起,我们主要介绍关于传输层相关的两个著名协议,即 UDP 与 TCP 协议,那么就让我们开始从传输层说起。传输层基本概念我们知道传输层位于网络层之上,网络层提供了主机之间的逻辑通道。那既然已经把一个数据包从一个主机发到另一个主机上面了,为什么还需要传输层呢?这是因为传输层提供了应用进程之间的端与端之间的数据传输功能。我们知道一个电脑可能有多个进程同时在使用网络连接,那么网络包达到主...原创 2019-07-11 00:11:21 · 554 阅读 · 0 评论 -
IO多路转接之select、poll、epoll简介及优缺点对比
IO多路转接IO多路转接也叫做IO多路复用,它是一种处理高并发的IO事件监控。它可以同时对大量的描述符进行监控,监控其是否具备了IO条件。就绪:包括了读就绪事件(就是有数据到来的时候),写就绪事件(缓冲区有空闲的空间),异常事件(发生异常)。对于服务器来说,很多时候我们都是监控的读事件,对于写事件和异常事件都只会在特定的情况下使用。IO多路转接之selectselect简介系统提供了se...原创 2019-07-25 15:17:28 · 617 阅读 · 0 评论 -
Linux之命名管道及其使用
管道匿名管道:可以用于有血缘关系之间的进程间的通信(pipe)命名管道:可以用于任意进程间的通信(fifo)此前我已经详细介绍过了匿名管道与命名管道的基本用法及其原理,这次我主要介绍一下如何利用命名管道来实现进程间的通信。命名管道:为管道创建一个管道文件,这个管道文件就是管道的名字,但实质还是内核中的缓冲区。建立管道文件#include <sys/types.h>...原创 2019-04-13 13:15:10 · 7235 阅读 · 0 评论 -
Linux进程通信——共享内存(共享存储映射)
共享存储映射文件进程间通信存储映射I/O (Memory-mapped I/O) 使一个磁盘文件与存储空间中的一个缓冲区相映射。于是当从缓冲区中取数据,就相当于读文件中的相应字节。于此类似,将数据存入缓冲区,则相应的字节就自动写入文件。这样,就可在不适用read和write函数的情况下,使用地址(指针)完成I/O操作。使用这种方法,首先应通知内核,将一个指定文件映射到存储区域中。这个映射...原创 2019-04-09 22:09:20 · 748 阅读 · 0 评论 -
Linux进程间通信——管道
IPC方法概念:Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcessCommunication)。进...原创 2019-04-09 18:55:08 · 459 阅读 · 0 评论 -
Linux之常用基础指令二
常用的Linux相关基础指令二1、cat功能:查看目标文件的内容使用方法:cat [选项参数][文件]常用选项参数:-b 对非空输出行编号-n 对输出的所有行编号-s 不输出多行空行2、more功能:功能类似cat,查看文件内容(分页显示)使用方法:more [选项参数][文件]常用选项参数:-n 对输出所有行编号q 退出more指令3、less功...原创 2019-03-12 17:15:17 · 126 阅读 · 0 评论 -
Linux进程概念
操作系统概念:操作系统是一个软件,是管理和控制计算机硬件与软件资源的计算机程 序,它的目的就是为了让计算机更加的好用,方便用户对计算机的使用。Linux概念:Linux操作系统是一个多用户多任务的一个开源的操作系统。库函数与系统调用接口概念:库函数是对系统调用接口的一层封装,他们是上下级调用关系,库函数调用了系统调用函数。进程与程序程...原创 2019-03-30 17:42:07 · 168 阅读 · 0 评论 -
Linux进程创建之fork()函数
进程创建如何创建一个子进程通过复制调用进程,创建一个新的进程,我们称这个新的进程为子进程。复制的是父进程的PCB,因此父进程与子进程的关系就为代码共享,数据独有。具体实现方法通过调用fork()函数 函数原型 pid_t fork(void)返回值创建子进程成功,则有了两个进程,那我们如何对这两个进程进行区分呢,那便是通过fork()函数的返回值来判断,对于父进程返回...原创 2019-03-30 18:20:47 · 601 阅读 · 2 评论 -
Linux文件类型及重要目录
重要目录在Linux命令行下输入 ls / 就会出现许多目录,在这里我来列举一点常见的目录 ls / //查看根目录下的内容/bin:bin是Binary的缩写, 这个目录存放着我们最经常使用的命令,例如ls 、cp 等/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev :dev是Device(设...原创 2019-03-23 21:25:46 · 304 阅读 · 0 评论 -
Linux基础命令操作
Linux基础命令操作Linux 基础Shell、 Bash 学名叫什么?命令解析器Shell 和 Bash的关系?Shell – unixBash – linux在linux终端下使用什么键来补齐命令或者路径?a) Tab当前用户所在目录为/home/itcast/ 此时按两侧tab键会看到什么效果?a) 类从此目录下的所文件和目录终端下, 查看上一条记录的快捷键?a)...原创 2019-03-23 21:42:30 · 204 阅读 · 0 评论 -
Linux之vim
vim在Linux下,vim共有12种操作模式,但我们最常用的有三种模式,如下普通模式 (命令模式)底行模式 (末行模式)编辑模式 (插入模式)工作模式:1. 命令模式 – 打开文件之后, 默认进入命令模式2. 编辑模式 – 需要输入一些命令, 切换到编辑模式3. 末行模式 – 在末行模式下可以输入一些命令vim编辑器的使用命令模式下的操作: 1>. ...原创 2019-03-23 22:09:47 · 146 阅读 · 0 评论 -
Linux之gcc/gdb
gccgcc工作流程1. 预处理 gcc -E2. 编译 gcc -S3. 汇编 gcc -c4. 链接 没参数-o: 指定生成的文件的名字-D: 在编译的时候定义宏(控制log的输出)-I: 指定头文件的路径-g: gdb调试的时候需要添加该参数-O: 编译优化, 3个等级 -O(1-3)-Wall: 编译期间输出警告信息gdbgdb调试:启动gdbst...原创 2019-03-23 22:22:14 · 247 阅读 · 1 评论 -
Linux进程等待进程终止与程序替换
进程等待概念:进程等待就是子进程的状态改变作用:避免产生僵尸进程。一个进程在终止时会关闭所有的文件描述符,释放分配在用户空间的内存,但退出原因还保存在PCB中,如果该进程是正常终止,那么它的退出状态就会保存在PCB中,若果该进程不是正常终止,则会将导致进程异常终止的信号保存在PCB中。那么父进程便可以通过调用wait()函数或者waitpid()函数来查看子进程退出信息,然后可以彻底清...原创 2019-04-05 17:51:39 · 740 阅读 · 0 评论 -
Linux程序地址空间及库函数与系统调用接口
程序地址空间概念:程序地址空间也叫虚拟地址空间,在Linux下,每运行一个程序即一个进程,操作系统都会为其分配一个虚拟的地址空间,在32位操作系统下,操作系统分配的虚拟地址空间为0~4G。进程的内存描述符(mm_struct):每个进程都有一个mm_struct,它是一个结构体,我们也把它叫做内存描述符,Linux就是通过这个结构体实现对内存的管理,mm_struct就是用来描述一个进...原创 2019-04-06 13:03:52 · 271 阅读 · 0 评论 -
MI SHELL--简易版的迷你shell
迷你shell实现shell:命令行解释器,就是对我们输入的命令进行解释,实现命令功能思路1、等待标准输入2、解析输入数据3、判断是否内建命令4、创建子进程进行程序替换5、回收子进程具体代码实现1 //shell 2 //1、等待用户输入 3 //2、解析输入数据 【ls】【-l】 4 //3、创建子进程 5 //4、等待子进程退出(重复) 6 #inc...原创 2019-04-06 13:23:12 · 450 阅读 · 0 评论 -
Linux进程状态环境变量与僵尸进程
进程状态进程基本的状态有5种。分别为初始态,就绪态,运行态,挂起态与终止态。其中初始态为进程准备阶段,常与就绪态结合来看。很多时候我们也把进程状态分为三种,即运行态、就绪态、阻塞态。如图所示。Linux下进程状态R (运行状态)S (可终端睡眠态)D (不可中断睡眠态)T (停止态)t (追踪态)X(死亡状态)Z (僵尸态/僵死态)僵尸进程概念:处于僵死态的进程就...原创 2019-04-01 22:36:45 · 523 阅读 · 2 评论 -
Linux之IO系统调用接口与文件描述符
系统调用接口open接口1、 头文件#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>2、函数原型int open(const char *pathname, int flags);int open(const char *pathname, int flags, mod...原创 2019-04-11 21:24:50 · 237 阅读 · 0 评论 -
Linux文件系统与软链接硬链接
Linux下文件系统磁盘上文件的管理系统,磁盘上除了交换分区外都有一个文件系统,如下图所示这里我以ext2文件系统为例,介绍一下文件系统,如图Linuxext2文件系统,上图为简略磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被划分为一个个的block。一个block的大小是由格式化的时候确定的,并且不可以更改。例如mke2fs的-b选项可以设定block...原创 2019-04-11 22:19:32 · 419 阅读 · 0 评论 -
Linux之常用基础指令一
初识Linux常用Linux的相关命令1、ls 指令功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息使用方法:ls [选项参数] [目录或文件](以下为常用选项参数)-a 列出目录下的所有文件,包括以 . 开头的隐含文件(Linux下以.开头的文件为隐藏文件,默认不显示)-l 列出文件的详细信息-t 以时间对目录下文件进行...原创 2019-03-09 18:14:37 · 161 阅读 · 0 评论