Linux
文章平均质量分 70
瘦弱的皮卡丘
2018
展开
-
bash和sh的区别
Shell 中文意思贝壳,寓意类似内核的壳。Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 脚本(shell script)是一种为 shell 编写的脚本程序。常说的shell通常都是指 shell 脚本,但shell和shell script是两个不同的概念。转载 2023-07-03 21:32:41 · 542 阅读 · 0 评论 -
Linux | 什么是消息队列以及消息队列的代码实现
一、消息队列的定义和特点1、什么是消息队列 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。消息队列是消息的链接表,存放在内核中并由消息队列标识符标识。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题(命名管道要读端和写端都存在,否则出现阻塞)。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。2、消息队列的特点 消息队列可以实现消息的随机查询。消息不一定要以先进先出的次序读取,编原创 2021-01-29 21:00:27 · 584 阅读 · 0 评论 -
Linux | 利用条件变量和互斥锁实现生产者和消费者模型
#include <iostream>#include <queue>#include <pthread.h>#include <stdio.h>#include <unistd.h>#define MAX_CAPACITY 5using namespace std;class Queue{private: queue<int> _store; //初始化一个存放数据的队列 int _capacity;//.原创 2021-01-29 15:11:04 · 680 阅读 · 0 评论 -
Linux | 什么是条件变量
条件变量(为了实现多个线程间的同步操作) 与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。 条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步 的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起; 另一个线程使 “条件成立”(给出条件成立信号)。【原理】 条件的检测是在互斥锁的保护下进行的。线程在改变条件状态之前必须首先锁住互斥量。如果一个条件为假原创 2021-01-28 23:11:57 · 681 阅读 · 0 评论 -
Linux | 什么是读写锁以及如何用代码实现读写锁
读写锁(同步) 读写锁与互斥量类似,不过读写锁允许更改的并行性,也叫共享互斥锁。互斥量要么是锁住状态,要么就是不加锁状态,而且一次只有一个线程可以对其加锁。读写锁可以有3种状态:读模式下加锁状态、写模式加锁状态、不加锁状态。 一次只有一个线程可以占有写模式的读写锁,但是多个线程可以同时占有读模式的读写锁(允许多个线程读但只允许一个线程写)。【读写锁的特点】: 如果有其它线程读数据,则允许其它线程执行读操作,但不允许写操作; 如果有其它线程写数据,则其它线程都不允许读、写操作。原创 2021-01-27 22:31:56 · 447 阅读 · 0 评论 -
Linux | 什么是互斥锁以及如何用代码实现互斥锁
互斥锁(为了实现多个线程对同一共享资源的争用管理)在多任务操作系统中,同时运行的多个任务可能都需要使用同一种资源。这个过程有点类似于,多人共用一台打印机,为了使大家都能有序公正的使用这台打印机,肯定要进行某种管理。在线程里有这么一把锁——互斥锁(mutex),互斥锁是一种简单的加锁的方法来控制对共享资源的访问,互斥锁只有两种状态,即上锁( lock )和解锁( unlock )。【互斥锁的特点】:1.原子性:把一个互斥量锁定为一个原子操作,这意味着操作系统(或pthread函数库)保证了如果.原创 2021-01-27 22:26:29 · 2061 阅读 · 0 评论 -
Linux | 线程简述以及相关操作函数
目录一.简述线程二.线程的相关函数1、线程标识2、线程创建3、线程终止三、线程私有数据一.简述线程在一个进程中的多个执行路线叫做线程。其中,进程并不执行什么, 只是维护应用程序所需的各种资源,而线程则是真正的执行实体。为了让进程完成一定的工作,进程必须至少包含一个线程。进程和线程之间的关系示意图同一进程中,线程之间会共享该进程的一些资源,也有一些资源是线程独立拥有的。但是不同进程间的线程是不共享资源的。【共享】: 代码区、数据区、堆区(注意没有栈区)、环境翻译 2021-01-27 15:01:24 · 325 阅读 · 0 评论 -
select、poll、epoll之间的区别
目录引言select时间复杂度缺点poll时间复杂度缺点epoll时间复杂度epoll的ET和LT模式epoll为什么要有EPOLLET触发模式?epoll的优点select、poll、epoll 区别总结:支持一个进程所能打开的最大连接数FD剧增后带来的IO效率问题消息传递方式总结引言select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就翻译 2020-11-26 19:18:20 · 367 阅读 · 0 评论 -
Linux | 什么是软链接和硬链接 | 软链接和硬链接的区别
目录一.简单的理解inode二.什么是软链接1.抽象的理解软链接2.创建软链接的方式3.软链接的特性4.软链接的作用三.什么是硬链接1.抽象的理解硬链接2.创建硬链接的方式3.硬链接的特性4.硬链接的作用一.简单的理解inode我们知道在Linux系统中,一切皆文件,那么为了区分这些文件,以及标注这些文件的一些信息,例如文件的创始者,创建日期等等,我们就要使用一块特殊的内存来存放这些信息,而存储这些信息的区域就被称为inode,中文译名为“索引节点”。也许原创 2020-08-14 21:17:53 · 630 阅读 · 0 评论 -
Linux | gcc和g++的区别
一.笼统的说明gcc和g++的区别gcc 最开始的时候是 GNU C Compiler,就是一个c编译器。但是后来因为这个项目里边集成了更多其他不同语言的编译器,gcc就代表 the GNU Compiler Collection,所以表示一堆编译器的合集。 g++则是gcc的c++编译器。现在我们在编译代码时调用的gcc,已经不是当初那个c语言编译器了,更确切的说他是一个驱动程序,根据代码的后缀名来判断调用c编译器还是c++编译器 (g++)。比如你的代码后缀是*.c,他会调用c编译器还有link原创 2020-07-11 13:16:11 · 528 阅读 · 0 评论 -
Linux | Linux的文件权限与目录配置
目录一.使用者与群组1.文件拥有者2.群组概念3.其他人的概念4.Linux用户身份与群组记录的文件二.Linux文件权限概念1.Linux文件属性三.如何改变文件属性与权限1.改变所属群组 chgrp2.改变文件拥有者 chown3.改变权限 chmod四.目录与文件之权限意义1.权限对文件的重要性2.权限对目录的重要性3.文件和目录权限的对比一.使用者与群组1.文件拥有者由于 Linux是个多人多任务的系统,因此可能常常会有多人同时原创 2020-05-12 17:42:20 · 358 阅读 · 0 评论 -
计算机网络 | Linux | 解析TCP协议——进阶篇
进阶篇一.TCP报文段的首部格式首部固定部分各字段的意义如下:源端口和目的端口各占2个字节,分别写入源端口号和目的端口号。 序号占4字节。在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。 确认号占4字节,是期望收到对方下一个报文段的第一个数据字节的序号。 数据偏移占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。这个字段实际上是指出TCP报文段的...原创 2020-03-28 21:43:29 · 790 阅读 · 1 评论 -
计算机网络 | Linux | 解析TCP协议——基础篇
基础篇一.TCP概述1.什么是TCP连接首先,每一条TCP连接有两个端点,而TCP连接的端点叫做套接字( socket)。根据定义:端口号拼接到 IP地址即构成了套接字。因此,套接字的表示方法是在点分十进制的IP地址后面写上端口号,中间用冒号或逗号隔开。例如,若IP地址是192.3.4.5而端口号是80,那么得到的套接字就是(192.3.4.5:80).总之,我们有,每一条TCP连接...原创 2020-03-27 16:18:47 · 563 阅读 · 0 评论 -
计算机网络 | Linux | 解析UDP协议
一.UDP概述1.什么是UDP协议UDP 是 User Datagram Protocol 的简称, 中文名是用户数据报协议,是一个简单的面向数据报的传输层协议,在网络中用于处理数据包,是一种无连接的协议。UDP不提供可靠性的传输,它只是把应用程序传给 IP 层的数据报发送出去,但是并不能保证它们能到达目的地。由于 UDP 在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等...原创 2020-03-27 11:43:46 · 590 阅读 · 0 评论 -
生成可执行程序的四个步骤——预处理,编译,汇编,链接
导读相信大家对下列这段代码都不陌生a.c#include<stdio.h>int main(){ printf("Hello World!\n"); return 0;}在Linux中,当我们使用gcc来编译这个程序时,只需使用最简单的命令gcc -o a a.c实际上,上述过程可以分解为4个步骤,分别是预处理(又可以被称为预编...原创 2020-02-04 14:18:08 · 8189 阅读 · 1 评论 -
Linux之守护进程
目录一.守护进程二.进程组 / 组长进程 / 会话 / 会话首进程三.守护进程的创建一.守护进程1.什么是守护进程守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。很多守护进程在系统引导的时候启动,并且一直运...翻译 2019-11-24 22:23:48 · 327 阅读 · 0 评论 -
Linux 进程替换 | exec函数
目录一.exec函数族一.exec函数族1.进程体替换使用函数fork()创建新的子进程后,子进程往往需要调用函数exec()以执行另一个程序。当进程调用函数exec()时,该进程执行的程序完全替换为新程序,而新程序则从其函数main()开始执行。与 fork 或 vfork 函数不同,exec 函数不是创建调用进程的子进程,而是创建一个新的进程取代调用进程自身。新进程会用自己...原创 2019-11-23 22:51:33 · 520 阅读 · 0 评论 -
Linux进程间通信 | 共享内存——详解
共享内存1.共享内存的定义共享内存就是允许多个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入数据,所做的改动将立即影响...原创 2019-11-22 17:13:30 · 496 阅读 · 0 评论 -
Linux进程管理 | fork 和 写时拷贝
目录一.fork二.写时拷贝三.孤儿进程四.僵死进程一.fork1.函数功能复刻(英语:fork,又译作派生、分支)是UNIX或类UNIX中的分叉函数,fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程,fork以后的两个进程单独执行。这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本。f...原创 2019-11-21 00:18:09 · 477 阅读 · 0 评论 -
Linux进程管理 | 进程
目录一.进程一.进程1.进程的定义进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。简单的理解为正在运行中的程序。即执行时,将程序加载到内存上。是动态的。程序:存储在磁盘上的可执行的二进制文件。是静态的。查看进程的命令:ps //显示当前终端的所有进程ps -e //显示系统所有的进程...原创 2019-11-19 23:46:18 · 202 阅读 · 0 评论 -
Linux—静态库与共享库——详解
目录一.库二.静态库三.共享库一.库1.库的定义库是一组预先编译好的函数的集合,这些函数都是按照可重用的原则编写的。本质上,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。就是将源代码转化为二进制格式的源代码,相当于进行了加密,别人可以使用库,但是看不到库中的内容。简单的理解为中间文件的集合或某些功能代码的集合。2.几种文件的存放路径库文件:/lib 或...原创 2019-11-19 20:22:53 · 799 阅读 · 0 评论 -
Linux进程间通信—管道——详解
目录一.管道二.匿名管道(即管道)三.命名管道一.管道1.定义管道是Linux/UNIX系统中比较原始的进程间通信形式(简单的理解为两个进程之间通讯的方式),它将数据以一种数据流的方式,在多进程间流动。在系统中其相当于文件系统上的一个文件,来缓存所要传输的数据。这里我们要了解三个概念:单工:只支持数据在一个方向上传输,在同一时间只有一方能接受或发送信息。 半双工:...原创 2019-11-18 23:09:15 · 869 阅读 · 0 评论 -
Linux目录结构与功能——详解
目录Linux 系统目录结构Linux 系统目录结构的功能Linux 系统目录结构1.查看目录结构的命令ls /2.树状目录结构3.文件或目录的表达方法在 Linux 或 Unix 操作系统中,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构。文件系统的最顶层是由根目录开始的,系统使用 / 来表示根目录。在根目录之下的既可以...原创 2019-11-18 11:44:43 · 1097 阅读 · 0 评论 -
Linux信号量 | 进程间通信—信号量——详解
目录一.信号量的概念二.信号量的使用三.信号量的具体应用四.总结一.信号量的概念1.信号量的定义为了防止出现因多个程序同时访问临界资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区。而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问它,也就是说信号量是用来调协进程对临界资源的访...原创 2019-11-05 19:32:19 · 1191 阅读 · 0 评论