Linux
文章平均质量分 68
honeyCR
这个作者很懒,什么都没留下…
展开
-
Linux基础
一、Linux的基本指令1、ls指令ls[选项][文件或目录],对于文件,ls将列出名以及其他信息对于目录,ls将列出该目录下的文件选项-a 列出本目录的所有文件,包括隐藏文件-l 列出本目录下文件详细信息-k 以字节的形式列出本文件大小-kh 以k显示文件大小,更加容易浏览-l 一行只输出一个文件可见,在Linux原创 2017-11-18 17:00:31 · 296 阅读 · 0 评论 -
进程间关系和守护进程
我们已经了解了进程,再来了解一下进程间关系。我们先了解一下以下概念:一、进程组、作业和会话1、进程组每个进程除了有一个进程ID之外,还属于一个进程组。进程组是一个或多个进程的集合。通常,它们与同一作业相关联,可以接收来自同一终端的各种信号。每个进程组有一个唯一的进程组ID。每个进程组都可以有 一个组长进程。组长进程的标识是,其进程组ID等于其进程ID。 组长进程可以创建一个进程组,创建该组中的进程,原创 2018-04-20 22:39:15 · 200 阅读 · 0 评论 -
进程程序替换以及简易shell的实现
一、进程程序替换进程程序替换:进程程序替换过程只是将代码和数据替换,并没有创建新的进程,pid不变。Linux操作系统中的shell就是运用这个原理处理客户请求的,不是每个请求都是shell亲力亲为的,所以shell会创建子程序替换他,在实现shell的过程中我们会用到exec函数,所以我们先了解一下exec函数族并对其每个的用法用代码实现一遍。exec函数家族包括6种:execl、execlp、...原创 2018-03-24 16:21:24 · 1083 阅读 · 0 评论 -
理解文件系统----inode与软硬链接
在之前一篇文章里,我们讲了文件的部分属性,现在我们来了解一下文件系统。点击打开链接一、inode1、什么是inode理解inode,要从文件存储说起。文件储存在硬盘上,硬盘的最小存储单位叫做“扇区“(Sector),每个扇区储存512字节,操作系统读取硬盘的时候,不是一个一个扇区读取的,而是一次性读取多个扇区,即一次性读取一个块(block)。这种由多个扇区组成的块,是文件存取的最小单位。而储存一...原创 2018-04-23 22:00:02 · 339 阅读 · 0 评论 -
Linux调试器-gdb的使用
一、了解gdbGDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。一般来说,GDB主要完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) 3、当程序被停住时,可以检查此时你的程序中所发生的事。 4、动态的改变你程序的执行环境。调试过程的常用命令:li...原创 2018-04-13 21:27:04 · 413 阅读 · 0 评论 -
生产者与消费者模型
一、模型简介如图:一共有三种关系:生产者与生产者的互斥关系,消费者与消费者的互斥关系,生产者与消费者的互斥且同步关系。两种角色:生产者(线程)与消费者(线程)一个交易场所:仓库(一段内存空间,且可存可取)二、基于单向链表的生产者消费者模型1、我们这里用一个单链表当做那段共享内存,简单实现生产者消费者模型。代码: 1 #include<stdio.h> 2 #include<s...原创 2018-04-12 12:49:37 · 7668 阅读 · 1 评论 -
Linux线程
一、线程的概念我们知道进程有自己独立的地址空间运行,在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列“,一切进程至少都有一个执行线程。进程是资源竞争的基本单位,线程是程序执行的最小单位。1、进程的多个线程共享:1)同一地址空间,因此Text Segment、Data Segment都是共享的,如果定义一个函数,在各线程中都可以调用,如果定义一个全...原创 2018-04-02 21:56:18 · 923 阅读 · 1 评论 -
读者写者模型
前面我们已经介绍过生产者消费者模型,那么,什么是读者写者模型,它和我们介绍的生产者消费者模型又有什么不同?一、读者写者模型1、模型简介在进程中,对某些资源的访问会存在两种可能的情况: 一种是写操作,它是可以独占资源的,即具有排他性。 另一种是读操作,可以有多个资源并发地去访问某种资源,它的访问方式是共享的。(一般由于写端操作次数少,读端操作次数多,因此写端的优先级较高)。这种模型是从对文件的读写原创 2018-04-14 18:08:29 · 487 阅读 · 0 评论 -
数据流重定向和命令判断符(&&)(||)
数据流重定向就是将某个命令执行后应该要出现在屏幕上的数据传输到其他的地方,例如文件或者是设备。如果我们想要将某些数据保存下来,就很有用了。我们什么时候需要呢?1、屏幕输出的内容很重要,而且我们需要将它存起来2、后台执行的程序,不希望他干扰屏幕的正常输出结果3、一些执行命令的可能已知错误信息,想忽略掉时。4、错误信息与正确信息需要分别输出时。一、数据流重定向1、standard output和sta...原创 2018-03-26 21:57:29 · 468 阅读 · 2 评论 -
与死锁的有关知识简述
我们先来举例认识一下死锁:例如,系统中只有一台扫描仪R1和一台刻录机R2。有两个进程P1和P2,他们都准备将扫描的文件刻录到CD光盘上,进程P1先请求扫描仪R1并获得成功,进程P2先请求刻录机也获得成功。后来P1又请求CD刻录机,因它已被分配给了P2而阻塞。P2又请求扫描仪,也因被分配给了P1而阻塞。此时两个进程都被阻塞,双方都希望对方能释放出自己所需要的资源,但它们都因不能获得自己所需要的资源去...原创 2018-04-21 21:59:51 · 522 阅读 · 0 评论 -
网络编程套接字一--UDP网络程序
一、IP地址和端口号1、IP地址IP协议有两个版本, IPv4和IPv6。IP地址是在IP协议中, 用来标识网络中不同主机的地址; 对于IPv4来说, IP地址是一个4字节, 32位的整数; 我们通常也使用 "点分十进制" 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255。在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址...原创 2018-04-26 21:19:00 · 216 阅读 · 0 评论 -
C/C++源代码如何变成可执行程序的?
如下图所示: 详细解释1、编译预处理读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理伪指令主要包括以下四个方面:宏定义指令,如#define Name TokenString,#undef等。 对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,但作为字符串常量的Name则不被替换。 对于后者,则将取消对某个宏的定义...原创 2018-07-20 15:53:05 · 11885 阅读 · 0 评论 -
Linux下grep讲解及用法示例
关于正则表达式的讲解请看博文: 这里写链接内容简介grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。选项介绍下面为一些常用的命令参数选项: 选项 介绍 -? 同时显示匹配行上下?行 -A?...原创 2018-07-05 17:11:17 · 11655 阅读 · 0 评论 -
Linux--简单进度条的实现
我们需要注意以下几点:进度条的表示:首先可以使用‘#’或者其他符号来表示加载成功的进度,建立一个数组将符号存入,从0%~100%可以使用101个符号来表示。因为是字符串需要有‘\0’所以数组的大小可以确定在102显示:因为不需要多行显示,只需刷新当前进度那么输出时只需要回车‘\r’,不需要换行‘\n’为了表示进度条正常工作显示可以使用‘-’,‘\’,‘|’,‘/’ 来表示顺时针加载小圈...原创 2018-07-10 18:13:15 · 433 阅读 · 0 评论 -
内零头与外零头
操作系统在分配内存时,有时候会产生一些空闲但是无法被正常使用的内存区域,这些就是内存碎片,或者称为内存零头。这些内存零头一共分为两类:内零头和外零头。 内零头是指进程在向操作系统请求内存分配时,系统满足了进程所需要的内存需求后,还额外还多分了一些内存给该进程,也就是说额外多出来的这部分内存归该进程所有,其他进程是无法访问的。 外零头是指内存中存在着一些空闲的内存区域,这...原创 2018-07-16 18:41:52 · 5748 阅读 · 1 评论 -
五种IO模型
基础概念在之前写网络编程的时候,我们已经接触过同步,异步,阻塞,非阻塞这些概念, 我们一起来回顾一下: 同步: 同步,就是在客户端发出一个功能调用时,在没有得到结果之前,该调用不返回。 通俗点说,就是必须一件一件事做,等前一件事完了之后才做后一件事。 eg:普通的B/S模式(同步):提交请求->等待服务器处理->处理完毕返回,这期间客户端浏览器不能干任何事 异步: ...原创 2018-05-31 10:49:07 · 3624 阅读 · 0 评论 -
文件共享及dup、fcntl函数详解
一、文件共享1、简介在介绍dup函数之前,先要说明不同进程共享打开文件。 内核使用三种数据结构表示打开文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。 (1)每个进程在进程表中都有一个记录项,记录项中包含一张打开文件描述符表,可将其视为一个矢量,每个描述符占用一项。 (2)内核为所有打开文件维持一张文件表。 (3)每个打开文件(或设备)都有一个v节点...原创 2018-05-15 22:48:21 · 710 阅读 · 0 评论 -
程序的终止及atexit函数详解
1、背景对C语言有所了解的人,都知道main函数是整个程序的入口。但是其实不是,在内核中可以使用链接器来设置程序的开始地方。如下:当内核使⽤⼀个exec函数执⾏C程序时,在调⽤main函数之前先调⽤⼀个特殊的启动例程。可执⾏程序文件将此启动例程指定为程序的起始地址(这是由连接编辑器设置的,而连接编辑器则由C编辑器调用)。启动例程从内核获取命令⾏参数和环境变量,然后为调⽤main函数做好准备。2、a...原创 2018-05-08 14:33:53 · 3041 阅读 · 0 评论 -
内存池、进程池(线程池)的基本概念
在实现并发服务器时,动态创建子进程(子线程)显然有很多缺点,在上篇文章实现TCP多进程(多线程)版本时,就遇到了这个问题,回顾一下之前讲过的缺点:1、 动态创建进程(或线程)是比较耗费时间的,这将导致较慢的客户响应。2、进程(或者线程)间的切换消费大量CPU时间。3、由于系统的资源有限,能够创建的子进程(或线程)的数量有限。4、动态创建的子进程是当前进程的完整映像。当前进程必须递慎地处理其分配的文...原创 2018-05-05 11:57:06 · 2076 阅读 · 1 评论 -
Linux信号的有关概念及使用
一、信号的基本概念为了理解信号,先从我们最熟悉的场景说起,比如我们过马路时的交通信号灯,当我们看到红灯的时候,就会停下来等待,当我们看到绿灯的时候,会选择通行。这个红灯就是传给我们的信号。对于Linux中的信号,我们需要先了解:1、Ctrl-C产生的信号只能发给前台进程。一个命令后面加个&可以放到后台运行,这样Shell不必等待进程结束就可以接受新的命令,启动新的进程。 2. Shell可...原创 2018-03-24 22:03:09 · 818 阅读 · 0 评论 -
信号量
一、信号量1、原创 2018-03-20 18:16:24 · 399 阅读 · 0 评论 -
什么是进程,进程调用的流程
我们先了解一个概念。在Linux系统中,触发任何一个事件时,系统都会将它定义成为一个进程,并且给予这个进程一个ID,称为PID,同时依据触发这个进程的用户与相关属性关系,给予这个PID一组有效的权限设置。那么,我们必须了解什么叫“触发事件”。一、如何产生一个进程其实就是,执行一个程序或命令,就可以触发一个事件而取得一个PID。而系统是仅认识二进制文件的,当我们要让系统进行工作时,当然就需要启动一个...原创 2018-03-11 11:36:18 · 1993 阅读 · 0 评论 -
vim的常用按键说明及举例实现
一、为何要学vim1、所有的UNIX Like系统都会内置vi文本编辑器,其他的文件编辑器不一定存在2、所有软件的编辑接口都会主动调用vi3、vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便程序设计4、程序简单,编辑速度相当快速二、vim的三种模式1、一般模式以vim打开一个文件就直接进入一般模式了,在这个模式中你可以使用上下左右键来移动光标,删除字符或删除整行,也可以复制粘贴你...原创 2018-03-11 10:32:41 · 2151 阅读 · 0 评论 -
Linux命令与文件的查询
一、which(寻找执行文件)参数:-a:将所有由PATH目录中可以找到的命令均列出,不只是第一个找到的命令。eg:用root与一般账号查询ls这个命令的完整文件名查询cd这个命令的完整文件名因为which是根据PATH这个环境变量所规范的路径去查询执行文件的文件名。上例中cd查不到,因为cd是bash内置的命令。二、Linux系统会将系统中的所有文件都记录在一个数据库文件里面,而whereis与...原创 2018-03-09 20:39:50 · 645 阅读 · 0 评论 -
Linux文件内容如何查阅
一、直接查看文件内容直接查看一个文件内容可以使用cat、tac、nl这几个命令。1、cat(concatenate):由第一行到最后一行显示到屏幕上参数:-A:相当于-vET的整合参数,可列出一些特殊字符-b:列出行号,仅针对非空白行做行号显示,空白行不标行号-E:将结尾的断行字符$显示出来-n:打印出行号,连同空白行也会有行号-T:将Tab按键以 ^I 显示出来-v:列出一些看不出来的特殊符号e...原创 2018-03-08 18:19:28 · 283 阅读 · 0 评论 -
认识shell与bash
我们知道,管理整个计算机硬件的其实是操作系统的内核,这个内核是需要保护的,所以我们一般用户就只能通过shell来跟内核通信,以让内核达到我们想要达到的工作。那么系统有多少shell可以用呢?为什么要用bash?一、什么是shellshell的功能是提供用户操作系统的一个接口,因此shell可以调用其他软件。我们已经学过很多命令,比如man,chmod等,这些命令都是独立的应用程序,我们原创 2018-03-14 22:40:49 · 416 阅读 · 0 评论 -
Linux文件属性、权限及如何改变
一、Linux文件属性我们首先查看一下文件,以root的身份登录,执行 ls -al显示了文件的文件名与相关属性,上面七列是什么意思呢?以第一个文件为例:第一列:第二列: 表示有多少文件名连接到此节点第三列:表示此文件或目录的“所有者账号”第四列:表示这个文件的所属用户组第五列:文件的大小第六列:为这个文件的创建日期或者最近的修改日期第七列:文件名。如果文件名之前多了一个“ .” 则代表这个文件为...原创 2018-03-07 23:25:03 · 784 阅读 · 0 评论 -
Linux用户忘记root密码怎么办?
Linux用户忘记root密码怎么办?1、首先我们要将系统重启,页面上方会出现读秒的文字,在这几秒中按下任意键。2、按e进入grub编辑模式3、将光标移到kernel那一行,再按一次e进入kernel该行的编辑页面中,在最后输入single4、回车后,按b就可以开机进入单用户维护模式。用passwd命令修改root的密码5、回车后输入两次新的原创 2017-11-30 21:31:44 · 281 阅读 · 0 评论 -
Linux正确的关机命令
Linux正确的关机命令在Linux中,由于每个程序都是在后台执行的,如果直接按下电源开关关机时,则数据可能就此中断。且,若不正常关机,可能会造成文件系统的毁损,所以关机时,我们要注意下面几件事:(1)查看系统的使用状态 目前有谁在线:who 网络的联机状态:netstat -a 后台执行的程序:ps -aux(2)通知在线用户关机的时刻eg:shutdown(3)正确的...原创 2017-11-28 23:16:15 · 22431 阅读 · 0 评论 -
进程间通信--消息队列
一、消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法.每个数据块都被认为是一种类型,接受者进程接收的数据块可以有不同的类型值.我们可以通过发送消息来避免命名管道的同步与阻塞问题.消息队列与管道不同的是,消息队列是基于消息的,而管道是基于字节流的.且消息队列的读取不一定是先入先出.缺陷是:每个消息的最大长度是有限的(MSGMAX),每个消息队列的总的字原创 2018-03-18 12:26:06 · 259 阅读 · 0 评论 -
进程间通信---管道
我们知道,进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。但是,系统空间却是“公共场所”,所以内核显然可以提供这样的条件。所以进程之间交换数据时在内核进行,通俗的说A进程把数据拷贝到内核,B进程从内核中把数据读走,我们把内核提供的这种机制叫做进程间通信,(IPC)。一、管道(pipe) 管道是Unix中最古老的进程间通信的形式。 我们把从一个进程连接到另一个进程...原创 2018-03-12 20:18:52 · 182 阅读 · 0 评论 -
进程的创建、等待与终止
一、进程的创建1、fork函数在Linux中,fork函数是非常重要的函数,它从已存在的进程中创建一个新进程。新进程为子进程,原进程为父进程。返回值:子进程返回0,父进程返回子进程id,出错返回-1。什么时候使用fork呢?当一个父进程希望复制自己,使父子进程同时执行不同的代码段。或者一个进程要执行一个不同的程序。那么,进程调用fork函数后,控制权转移到内核中的fork代码后,内核做了什么呢?如...原创 2018-03-24 12:40:35 · 457 阅读 · 0 评论 -
进程间通信--共享内存
一、共享内存(shared memory)是多进程之间的通信方法,这种方法通常用于一个程序的多进程间通信,多个程序间可以通过共享内存来传递信息。共享内存是存在于内核级别的一种资源,在shell中可以使用ipcs命令来查看当前系统IPC中的状态,在文件系统/proc目录下有对其描述的相应文件。共享内存相比其他几种方式有着更方便的数据控制能力,数据在读写过程中会更透明。 共享内存区是最快的IPC形式。...原创 2018-03-20 15:58:05 · 223 阅读 · 0 评论 -
环境变量与相关命令
一、什么是环境变量什么是变量?简单来说就是,以一组文字或符号等,来代替一些设置或者是一串保留的数据。比如,设置了“myname”就是“honey”,所以当我们读取myname这个变量的时候,系统自然会知道那就是honey。而环境变量的存在,是因为在Linux中,所有的执行都需要一个执行码,我们在登录Linux后,是以shell来和Linux通信的,才可以真正经由bash来跟系统通信。而在进入she...原创 2018-03-23 23:00:57 · 511 阅读 · 0 评论 -
进程的调度算法
一、进程的调度进程调度方式是指当某一处进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更高的进程进入就绪队列,此时应如何分配处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。二、进程的调度算法1.先来先服务调度算法(FCFS) 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于...原创 2018-03-23 21:22:20 · 1043 阅读 · 0 评论 -
进程的状态与task_struct结构体
一、什么是进程进程,就是程序的一个执行实例,或正在执行的程序。详细介绍请看点击打开链接那么进程在Linux中有几种状态呢?如下:1、R处于运行或可运行状态,即进程正在运行或在运行队列(可执行队列)中等待。只有在该状态的进程才可能在CPU上运行,同一时刻可能有多个进程处于该状态。(注:很多教科书上将正在CPU上执行的进程的状态定义为Running,将可执行但尚未被调度执行的进程状态定义为Ready,...原创 2018-03-23 20:49:49 · 1199 阅读 · 0 评论 -
基础正则表达式字符及用法
一、什么是正则表达式简单的说,正则表达式就是处理字符串的方法,是以行为单位来进行字符串的处理行为,通过一些特殊字符的辅助,用以查找、替换、删除某特定字符串的处理程序。二、语系对正则表达式的影响我们知道,我们看到的字符文字与数字都是通过编码表转化而来的。由于不同语系的编码表是不相同的,所以会造成数据选取结果的不同。举个例子,在英文大小写的编码顺序中,zh_CN.big5及C这两种语系的输出结果分别入...原创 2018-03-29 19:38:13 · 737 阅读 · 0 评论 -
静态库与动态库
我们在编写一个C语言程序的时候,经常会遇到好多重复或常用的部分,如果每次都重新编写固然是可以的,不过那样会大大降低工作效率,并且影响代码的可读性,更不利于后期的代码维护。我们可以把他们制作成相应的功能函数,使用时直接调用就会很方便,还可以进行后期的功能升级。那么什么是库呢?库通俗的说就是把这些常用函数的目标文件打包在一起,提供相应函数的接口,便于程序员使用。库是别人写好的现有的,成熟的,...原创 2018-03-22 22:03:11 · 562 阅读 · 0 评论 -
open、creat、write、close、lseek等文件操作函数详解
首先我们回忆一下,stdin&stdout&stderrC默认会打开三个输出输入流,分别是stdin,stdout,stderr。且这三个流的类型都是FILE*,fopen返回值类型,文件指针文件操作文件操作的一般过程:打开文件,打开成功后,应用程序将获得文件描述符;应用程序使用文件描述符对文件进行读写等操作;全部操作完毕后,应用程序需要将文件关闭以释放用于管理打开文件的内存;1、...原创 2018-03-22 19:53:36 · 2039 阅读 · 0 评论 -
关于进程、线程总结
进程进程是程序的活动实体,是资源分配和调度的基本单位。 例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。进程的状态转换运行中的进程有可能有三种状态,就绪态,运行态和阻塞态当进程处于就绪态时,说明此进程已具备除处...原创 2018-08-19 15:45:24 · 308 阅读 · 0 评论