Linux
文章平均质量分 84
Shining-LY
这个作者很懒,什么都没留下…
展开
-
Linux 的一些基础指令
1、ls指令功能:列出当前目录下的所有子目录和文件用法格式:ls[选项][目录或文件]示例展示:该指令还有一些常用的用法:ls -a 列出目录下的所有文件(包括以 . 开头的隐含文件)ls -d 将目录像文件一样显示ls -l 列出文件的详细信息ls -t 目录以时间排序2、pwd 指令功能:显示用户当前所在的目录语法格式:pwd示例展示:3、cd指令功能:改变当前...原创 2017-11-30 22:09:06 · 264 阅读 · 0 评论 -
线程的同步与互斥
一、线程同步在一般情况下,创建一个线程是不能提高程序的执行效率的,所以要创建多个线程。但是多个线程同时运行的时候可能调用线程函数,在多个线程同时对同一个内存地址进行写入,由于CPU时间调度上的问题,写入数据会被多次的覆盖,这时会出现程序混乱的问题,无法得到原来需要的数据,所以就要使线程同步。 线程同步:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操...原创 2018-04-10 22:39:57 · 299 阅读 · 0 评论 -
Linux下线程相关知识总结
一、线程概念1、什么是线程(1)线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。 (2)线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。...原创 2018-04-03 22:51:26 · 272 阅读 · 0 评论 -
生产者与消费者模型
一、生产与消费者模型1、基本概念模型生产者/消费者模型描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,模型图如下所示: 2、必须具有的条件(1) 三种关系:三种关系分别指的是:消费者和消费者,生产者和生产者,生产者和消费者;其中消费者和消费者,生产者和生产者之间都属于竞争关系,生产者和消费者之间的关系相当于是一种食物链之间的依赖关系。 ...原创 2018-04-16 23:47:20 · 2249 阅读 · 2 评论 -
读写锁与读者写者模型
一、读写锁基本概念读写锁与互斥量的功能类似,对临界区的共享资源进行保护!互斥量一次只让一个线程进入临界区,读写锁比它有更高的并行性。 读写锁有以下特点: 1、如果一个线程用读锁锁定了临界区,那么其他线程也可以用读锁来进入临界区,这样就可以多个线程并行操作。但这个时候,如果再进行写锁加锁就会发生阻塞,写锁请求阻塞后,后面如果继续有读锁来请求,这些后来的读锁都会被阻塞!这样避免了读锁长期占用...原创 2018-04-22 21:19:57 · 460 阅读 · 0 评论 -
进程间关系和守护进程
一、进程间关系在了解进程间关系之前,我们先了解几个相关的概念:1、进程组给一个示例如下,我们来了解一下进程组: 命令用法解释: &:表示将进程放到后台运行 组长进程:2651 进程组ID:2651 进程ID:2651 2652 2653 ps 选项: a:不仅列出当前用户的进程,也列出所有其他用户的进程 x:不仅列出控制...原创 2018-04-19 23:06:14 · 235 阅读 · 0 评论 -
TCP服务器的单进程、多进程实现
一、socket编程在理解TCP服务器时,我们必须了解socket编程,在上篇博客中,我们知道在TCP/IP协议中,“IP地址+TCP端口号/UDP端口号”唯一标识网络通讯中的唯一一个进程,我们把“IP地址+端口号”就成为socket。在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成 的socketpair就唯一标识一个连接。socket本身有“插...原创 2018-05-08 20:20:50 · 3250 阅读 · 1 评论 -
死锁的相关知识总结
一、死锁首先一个例子让我们理解死锁假设有两个进程A和B,他们要求同时访问数据资源D和E,进程A先请求得到D资源,进程B先请求数据资源E并且申请成功,后来进程A又申请数据资源E,因为它已经被分配给了进程B而阻塞,进程B又申请数据资源D,因它被分配给了进程A而阻塞;双方都希望对方能释放自己所需要的资源,但他们因不能获得自己所需资源而继续运行,从而无法释放自己占有的资源,并且一直处于这样的僵持状态,这种状原创 2018-04-20 22:07:24 · 291 阅读 · 0 评论 -
网络编程套接字socket简单用法
一、IP地址1、什么是IP地址IP地址是指计算机在网络上的地址,一台计算机可以有多个IP地址(看网卡上配置了多少个地址),通过IP地址,一台计算机可以找到远在千里之外的另一台计算机,并将信息投递给它。IP地址对应IP协议,IP协议工作在OSI七层模型中的网络层。2、IP报文结构(IPv4)我们先来看看IP报文结构图: (1)版本字段:长度为4位,表示所使用的网络层IP...原创 2018-05-02 22:26:32 · 553 阅读 · 0 评论 -
HTTP协议基础知识总结
一、HTTP协议1、基本概念HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式。2、HTTP协议的基本特点...原创 2018-05-14 20:02:38 · 2288 阅读 · 0 评论 -
TCP/IP协议---UDP协议总结
一、TCP/IP协议栈首先我们来了解一下什么是协议1、协议网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。它的三要素是:语法、语义、时序。 为了使数据在网络上从源到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议(protocol),它最终体现为在网络上传输的数据包的格式。2、T...原创 2018-05-14 22:27:47 · 859 阅读 · 0 评论 -
popen函数和system函数详解
1、popen函数我们先用man指令查一下popen函数: 函数说明: (1)popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令。 (2)参数type可使用“r”代表读取,“w”代表写入。依照此type值,popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。随后进程便可利用此文件指针来读取...原创 2018-03-27 22:58:25 · 32859 阅读 · 2 评论 -
进程控制【创建、等待、终止和替换】
一、进程1、基本概念狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。2、进程–PCB(1)每个进...原创 2018-03-27 21:50:38 · 571 阅读 · 0 评论 -
简易shell的编写
在正式编写简易shell之前,让我们先了解一下关于shell的知识一、背景知识1、什么是shell(1)在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。 (2)同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许...原创 2018-03-26 20:50:26 · 744 阅读 · 0 评论 -
进程间通信【管道】
一、概念1、基本概念管道是一种最基本的IPC机制,作用于两个进程之间,完成数据传递;管道是Unix中最古老的进程间通信的形式。2、管道的特点(1)只能用于具有共同祖先的进程(具有亲缘关系的进程)之间通信;通常,一个管道由一个进程创建,然后该进程调用fork,此后,父子进程之间就可应用该管道 (2)管道的进程间通信是基于字节流的 (3)管道是基于文件形式的,自带同步互斥机制,...原创 2018-03-17 22:18:56 · 221 阅读 · 0 评论 -
进程间通信【信号量】
一、相关背景知识为了更加深入理解信号量我们还需了解一下几个概念1、原子操作(atomic operation)原子操作意为不可被中断的一个或一系列操作,也可以理解为就是一件事情要么做了,要么没做。而原子操作的实现,一般是依靠硬件来实现的。2、同步与互斥同步:进程同步指的是多个进程需要相互配合共同完成一项任务,在访问资源的时候,以某种特定顺序的方式去访问资源 互斥:一个资源每...原创 2018-03-22 19:31:10 · 210 阅读 · 0 评论 -
进程的调度算法
一、调度算法的概念操作系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源的有限性,必须按照一定的原则选择进程(请求)来占用资源。这就是调度。目的是控制资源使用者的数量,选取资源使用者许可占用资源或占用资源。二、几种常见的调度算法1、基于时间片轮转调度算法(RR)(1)时间片轮转法。给每个进程固定的执行时间,根据进程到达的先后顺序让进...原创 2018-03-22 20:26:50 · 413 阅读 · 0 评论 -
模拟实现僵尸进程&孤儿进程
一、僵尸进程&孤儿进程1、僵尸进程当进程退出并且⽗父进程(使⽤用wait()系统调⽤用)没有读取到⼦子进程退出的返回代码时就会产⽣生僵尸进程;僵尸进程会在以终止状态保持在进程表中,并且会一直等待父进程读取退出状态代码。2、孤儿进程一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们...原创 2018-03-22 21:47:01 · 237 阅读 · 0 评论 -
Linux信号基本概念及信号的用法
一、信号1、基本概念(1)这里讲的信号与信号量不同,信号是进程给操作系统或进程的某种信息,让操作系统或者其他进程做出某种反应。 (2)信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。 (3...原创 2018-03-29 22:22:14 · 510 阅读 · 0 评论 -
进程间通信【消息队列】
一、消息队列(1)消息队列提供了一个从一个进程像另外一个进程发送一块数据的方法 (2)每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值 (4)消息队列的生命周期是随内核的二、相关的数据结构和函数1、IPC对象数据结构(/usr/include/linux/ipc.h)内核为每一个IPC对象维护一个数据结构,其结构体内容如下:struct ipc_pe...原创 2018-03-20 18:41:22 · 312 阅读 · 0 评论 -
环境变量 之【export命令、getenv函数、setenv函数、unsetenv函数使用】
1、getenv函数 注释: (1)函数说明:获取环境变量的值 (2)参数说明:name为环境变量的名字 (3)返回值:执行成功则返回指向该内容的指针,找不到符合的环境变量名称则返回NULL2、setenv函数在Linux操作系统下使用man命令查看setenv: 注释: (1)函数说明:用来改变或增加环境变量的内容 (2)参数解释: name:环境变量名...原创 2018-03-24 19:42:04 · 3027 阅读 · 0 评论 -
open/read/write/close等文件系统调用接口以及fd与FILE的比较
在Linux系统下,文件是一个很重要的概念,接下来就介绍一下其相关的接口函数一、熟悉open/read/write/close等文件相关系统调用接口1、open函数 注释: (1)函数说明:用来打开一个已经存在的文件或者创建一个普通文件 (2)参数解释: pathname:要打开或创建的目标文件 flags:打开文件时,可以传入多个参数选项,用下面的一个或多个进行“或”运...原创 2018-03-24 23:16:18 · 1698 阅读 · 0 评论 -
静态库与动态库实现
一、什么是库本质上来说,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。某些代码需要给别人使用,但是我们不希望别人看到源码,就需要以库的形式进行封装,只暴露出头文件;对于某些不会进行大的改动的代码,我们想减少编译的时间,就可以把它打包成库。二、静态库1、概念静态库即静态链接库(Windows 下的 .lib,Linux 和 Mac 下的 .a)。之所以叫做静态,是因...原创 2018-03-25 22:09:59 · 278 阅读 · 0 评论 -
进程间通信【共享内存】
一、共享内存(1)共享内存(shared memory)是Unix下的多进程之间的通信方法,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。 (2)共享内存区是最快的IPC形式,一旦这样的内存映射到共享它的进程的地址空间,这下进程间的数据传递不再涉及到内核 (3)共享内存的生命周期也是随内核的,必须对其进行显示删除 (4)特别注意的是:共享内存是没有...原创 2018-03-21 23:28:47 · 187 阅读 · 0 评论 -
TCP和UDP的区别
tcp和udp都是传输层的通信协议,但他们的通信机制和应用场景又有所不同,那么到底有哪些区别呢?针对这个问题,做了一下总结:1、基于连接VS无连接tcp是面向连接的协议,而udp是无连接协议;意思就是说当一个客户端和一个服务器端通过tcp发送数据进行通信之前,必须先建立连接,他们通过tcp发送数据,tcp建立连接的过程就是tcp握手的过程。tcp是无连接的,所以发送数据之前不需要建立连接;...原创 2018-08-16 16:36:09 · 476 阅读 · 0 评论