![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LINUX
文章平均质量分 73
douguailove
让不可能变成可能,让可能变成超越期待
展开
-
Linux 文件与目录管理
在LINUX下,一切皆文件。文件多了就应该有文件夹吧。在Linux中都把文件夹叫做目录。 相对路径与绝对路径 相对路径:路径的写法不是由根目录/写起的。 绝对路径:路径的写法一定又根目录/写起。目录的相关操作 提到目录,首先需要说明一下一些比较特殊的目录,这是常用的,很重要,得记住。 接下来来看一下对于目录的一些命令cd(切换目录) cd 是Change Directory的缩写原创 2017-11-18 18:10:56 · 288 阅读 · 0 评论 -
umask函数的作用
使用umask函数需要包含头文件#include <sys/types.h>#include <srs/stat.h>mode_t umask(mode_t mask);//函数原型该函数为进程设置文件模式屏蔽字,并返回以前的值。即在创建新文件或目录时屏蔽掉你希望新文件或新目录不应有的访问权。比如说你不希望新创建的文件或目录拥有可执行的权限,那么只需将它的可执行权限作为该函...原创 2018-04-13 20:29:32 · 1310 阅读 · 1 评论 -
守护进程
守护进程的概念 守护进程(Daemon)是运行在后台的一种特殊的进程,它独立于控制终端并且周期性地执行某种任务或者等待处理某些发生的事件。守护进程不需要用户输入(即不需要从控制端接收数据)就能运行而且能够为用户程序甚至整个系统提供某种服务。Linux系统中大多数服务器就是通过守护进程实现的。常见的守护进程包括系统日志进程syslogd、web服务器httpd、邮件服务器sendmail...原创 2018-04-19 17:16:01 · 277 阅读 · 0 评论 -
多线程的同步与互斥
mutex互斥锁实现互斥为什么需要互斥? 前边已经说过了,线程是在进程内部的,即线程是共享进程的地址空间的。线程拥有仅属于自己的一部分数据的:线程ID、一组寄存器(用于保存自己的上下文信息)、栈、errno、信号屏蔽字、调用优先级。所以大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程空间内,其他线程是不能访问到的,但是,通常同一个进程内的线程之间是需要交互的,那就代表...原创 2018-04-26 13:39:13 · 244 阅读 · 0 评论 -
生产者消费者模型
什么是生产者消费者模型?生产者消费者问题是一个很经典的线程同步问题。将数据的产生和处理分由多个线程来完成,一部分用于完成数据的产生,另一部分用于完成数据的处理。我们形象地将产生数据的线程称为生产者,将用于数据的处理的线程称为消费者。生产者将数据生产出来,然后放入缓冲区,然后消费者从缓冲区去里边将数据取走。所以,当缓冲区里边是空的,即生产者没有生产数据的时候,消费者是没法进行消费的,同样的,当缓...原创 2018-04-26 20:46:09 · 211 阅读 · 0 评论 -
死锁的四个必要条件和解决办法
死锁概念及产生原理 概念:多个并发进程因争夺系统资源而产生相互等待的现象。 原理:当一组进程中的每个进程都在等待某个事件发生,而只有这组进程中的其他进程才能触发该事件,这就称这组进程发生了死锁。 本质原因: 1)、系统资源有限。 2)、进程推进顺序不合理。死锁产生的4个必要条件 1、互斥:某种资源一次只允许一个进程访问,即该资源一旦分配给某个进程...原创 2018-05-13 22:45:30 · 181398 阅读 · 23 评论 -
关于网络编程套接字的基础知识
为了方便后边更好地理解网络套接字编程,先介绍一些重要的概念。IP地址IP地址是在IP协议中用来标识网络中不同主机的地址。它有两个版本:IPv4 和 IPv6IPv4:IP地址由4个字节(0~255)构成,共32位。IPv6:IP地址由16个字节(0~255)构成,共128位。接下来主要学习IP地址为IPv4,在机器内部存的是一个4个字节,16位的数据,对于我们来说,是不好记忆的...原创 2018-05-28 19:25:13 · 260 阅读 · 0 评论 -
UDP服务器的实现
先介绍一个重要的函数:socket(),socket()是用于创建一个套接字的。函数原型:参数:domain确定了通信的特性也包括地址格式,比如AF_INET就是IPV4协议,AF_INET6就是IPV6协议,AF_UNIX是UNIX域。 type是套接字的类型,进一步的确定了通信的特性,套接字类型以SOCK_开头,常用的如SOCK_DGRAM就是UDP协议,SOCK_STRE...原创 2018-05-30 20:37:22 · 7455 阅读 · 0 评论 -
xargs的简单介绍
xargs的作用 xargs命令是用于给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。 它擅长于将标准输入数据转换成功命令行参数能够将管道或者标准输入里的数据转换成特定命令的命令行参数。 xargs也可以将单行或多行文本输入转换成其他格式,例如单行变多行,多行变单行。 xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递...原创 2018-07-08 17:48:29 · 15079 阅读 · 0 评论 -
正则表达式
正则表达式概念 正则表达式是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过特殊字符+普通字符来进行模式描述,从而达到文本匹配目的的工具。通俗的说,就是在描述某个事物时,通过描述它具有的特征来将它描述起来,有的特征是可以精确的描述出来,但是对于有的特征,每个人心中可能会有不同衡量。 比如说我们在描述一个人的时候,性别,身高,体重之类的是可以精确描述的,但是,在描述...原创 2018-07-05 20:37:40 · 197 阅读 · 0 评论 -
sort和uniq的常见选项及其使用
sortsort,见名知意,就是用来排序的。sort读取每一行输入,并按照指定的分隔符(默认为空格)将每一行划分成多个字段,这些字段就是排序的对象。同时,sort可以指定何种排序规则进行排序,默认使用当前字符集排序规则,还可以按照字典排序规则、数值排序规则、按照月份排序规则、按照文件大小排序规则等。常见选项 -r选项,以降序排序,sort默认的排序方式是升序。注意:-r这个选项并不参与排序,而...原创 2018-07-07 14:31:30 · 10194 阅读 · 0 评论 -
GET和POST的区别
转载自:https://www.cnblogs.com/logsharing/p/8448446.html 很不错的一篇文章,推荐大家看看~ 下表是参考自w3school的标准答案 接下来更具体的去了解它们的区别。 GET和POST都是HTTP协议中的两种发送请求的方法。 HTTP协议是基于TCP/IP实现的关于数据如何在万维网中如何通信的协议。HTTP的底层是TCP/IP。那么...转载 2018-08-13 10:02:17 · 199 阅读 · 0 评论 -
HTTP的状态码
摘自图解HTTP第4章 当客户端向服务器端发送请求时,通过状态码可以知道自己的请求结果。 状态码的类别 接下来介绍一下常用的状态码 2XX 成功200 (OK)请求已经正常处理表示从客户端发来的请求已经被服务器正常处理了。204 (No Content)请求处理成功,但是没有资源可返回。表示服务器已经成功处理,但在返回的响应报文中不含实体的主体部分。另外,也...原创 2018-08-20 09:34:58 · 346 阅读 · 1 评论 -
HTTP报头中为cookie服务的首部字段
Cookie的工作机制是用户识别和状态管理。Web网站为了管理用户的状态,会通过Web服务器,把一些数据临时写入用户的计算机内。当用户访问该Web网站时,可通过通信方式取回之前存放的Cookie。调用Cookie是,由于可校验Cookie的有效期,,以及发送方的域、路径、协议等,所以正规发布的Cookie内的数据不会因为来自其他Web站点和攻击者的攻击而泄漏。 Set-Cookie字段的属性...原创 2018-08-20 13:17:45 · 1070 阅读 · 0 评论 -
vim常用的功能
vim是vi 的升级版本,它兼容vi的所有指令,而且还有一些新的特性,比如说预付高亮、可视化操作不仅可以在终端进行,还可以在 x Window、mac os、windows vim 有多种模式,我们常用的有三种:命令模式、插入模式、末行模式。进入插入模式的三种方式: i : 从光标当前位置开始插入 a:从光标所在位置的下一个位置开始输入文字 o:插入新的一行,从行首开始输入文字。命...原创 2018-08-24 10:45:37 · 659 阅读 · 0 评论 -
线程概念与线程创建
什么是线程?为什么要有多线程? 一家公司需要生产某种产品,然后为生产这种产品提供了各种原材料和几层楼的资源。而这件产品是有很多个零件组成的,各个零件需要的材料可能是不同的,即,有些零件之间的制造是不相互影响的。现在要生产一种产品,由A、B两种零件组成。公司分配了1、2、3这三层楼(2楼是用于生产的该产品的各种器械)用于生产该产品。假设加工零件A是将材料都准备好了放到2楼的机器里边,...原创 2018-04-11 22:22:07 · 280 阅读 · 0 评论 -
进程间的关系
进程间有什么关系呢?我们都知道使用fork函数创建进程是一次调用两次返回。父进程返回子进程的进程ID(非0),子进程返回0值。很显然,使用fork创建出来的两个进程是父子关系。那如果两个进程都是同一个父进程创建出来的,它们是什么关系呢?“兄弟”关系。那么,两个或者多个进程之间,都有什么关系呢?在介绍进程间关系之前先介绍两个重要的概念:前台进程与后台进程 我们输入的命令由bash...原创 2018-04-16 21:16:46 · 3678 阅读 · 0 评论 -
进程间通信---信号量
在讲解信号量之前有必要先介绍几个重要的概念。进程的互斥:由于各进程要求共享资源,而有些资源需要互斥使用,因此各进程间竞争使用这些资源,这种关系叫做进程的互斥临界资源:系统中的某些资源能被多个进程看见,但是一次只允许一个进程使用,而这样的资源被称为临界资源或互斥资源。临界区:进程中访问临界资源的一段需要互斥执行的代码。临界区的访问规则: 空闲则入:没有进程在临界区是任何进程均可进入。 忙则等待:有进...原创 2018-04-03 21:55:40 · 192 阅读 · 0 评论 -
Linux的文件权限和目录配置
首先来简单讲解一下用户和用户组的概念,用户组就相当于一个竞赛小组,每个组员就相当于一个用户。 文件的权限 要想了解一个文件的权限,可以通过命令 ls -l来查看,ls -al 可将当前目录下所有文件(包含隐藏文件—文件名第一个字符为“ . ” 的文件)的详细的权限和属性。当使用ls -al 命令,将出现如下形式的内容: 第一列有十个字符,用于表示文件的类型和权限 第一个字符表明文件的类原创 2017-11-21 17:04:55 · 438 阅读 · 0 评论 -
如何解决段错误
程序运行时崩溃应该是经常遇到的事情,本篇文中就来讲解一下在Linux下如何解决程序崩溃,也就是发生了段错误之后找到程序具体出错的地方。如果程序通过了编译,但是在使用命令 ./ a.out 运行时程序崩溃了,即显示 段错误(core dumped) 其实系统会在程序崩溃的那一刹那将整个内核的信息记录在一个文件里边,(ls 并不会看到这个文件)使用命令 ulimit -a...原创 2017-12-03 14:55:03 · 19855 阅读 · 1 评论 -
教你轻松入门Linux下用gdb调试
调试往往是很重要的,有时候甚至比敲出代码本身更重要,废话不多说,直接来看看在Linux下怎么利用gdb调试。使用 vim test.c 命令 打开一个源文件test.c然后按 i 进入编辑模式,输入代码,本篇文章就以写一个斐波那契数列函数为例子程序的发布方式有两种:Debug模式和Release模式。Linux gcc/g++默认使用Release模式。要使用...原创 2017-12-03 12:26:52 · 409 阅读 · 0 评论 -
什么是make/Makefile?
什么是Makefile?看一看它的官方解释:一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。简单的理解就是,Makefile就是一个比较特别的文件,在这个原创 2017-12-06 09:44:15 · 1404 阅读 · 0 评论 -
一次fork与两次fork的区别
在讲一次fork和两次fork之前,有必要先来简单讲解一下wait的作用1、阻塞当前进程2、获得子进程退出的相关信息(回收僵尸进程)子进程不返回,父进程后边的内容就没法执行。注:wait函数只能在有子进程的父进程中调用。我们使用fork()函数创建一个子进程出来往往是为了父子进程能够同时执行两段代码。如果在父进程中不写wait()会导致子进程在退出后变成僵尸;但是使用wait()又会导致父进程阻塞...原创 2018-03-24 21:42:41 · 3753 阅读 · 1 评论 -
什么是信号?
引子 说到信号首先想到什么呢?相信很多人都会想到红绿灯。的确,红绿灯相对于我们来说,就是一个信号,一个与过马路相关的信号。我们能根据红绿灯的颜色来判断某个时刻是否应该过马路,还能知道自己多少秒后能过马路。为什么通过红绿灯我们就知道自己该干嘛呢?因为从小我们就听老师和父母告诉我们,红灯停,绿灯行,我们在脑海里记下了它的含义。那为什么要有红绿灯呢?因为了保证交通秩序和安全。那为什么大家都会...原创 2018-04-07 14:28:27 · 2771 阅读 · 0 评论 -
怎么实现进程替换
当没有指定查找路径时Windows 会默认在当前路径下查找Linux 默认在系统规定的目录(规定的目录是在PATH里边写死的)去查找,是不会在当前路径里边查找的要想在当前目录下查找,必须把当前路径配到PATH里边去如何将进程的空间的替换掉?------加载程序加载器----exec系列的函数----将磁盘中的内容映射到内存中exec系列函数的原型int execve(const char* fil...原创 2018-03-25 09:55:15 · 720 阅读 · 1 评论 -
什么是进程?
程序:完成特定任务的一系列指令集合 代码段+数据段 -----放在磁盘中的程序 进程:进行就是正在进行中的程序 1、用户角度: 进程是程序的一次动态执行过程 2、操作系统: 进程是操作系统分配资源的基本单位,也是最小单位很抽象的概念,那么,到底什么是进程呢?又为什么要有进程?CPU一次只能处理一个程...原创 2018-03-25 12:10:57 · 31184 阅读 · 8 评论 -
进程间通信---共享内存
前边说过,进程间通信的实质就是让两个不相干的进程看到同一份公共的资源,而内存是资源的一种,那么,如果让两个进程可以使用同一块内存,两个进程都可以往这块内存里边写东西和取东西,这不就是实现了进程间的通信了么。通过共享内存实现进程间的通信,原理很简单,主要就是它的实现了。 每个进程都具有自己独立的地址空间,又怎么让两个进程共享同一块内存呢?我们都知道,给进程的地址空间其实都是...原创 2018-03-30 23:42:10 · 2497 阅读 · 0 评论 -
进程间通信---管道
想必大家一定听说过这样一句话:Linux中一切皆文件。而管道就是进程间基于内存文件的通信机制。也是最传统的通信机制。管道,想象一下我们现实生活中的管道,都是有两端,两端都可以进,也都可以出。但是,我们都知道一般安装好了的管道都是一边用于进,一边用于出,毕竟使用管道就是用来帮我们传输一些流体的。相应的,在Linux中,我们也可以使用管道来传输我们所需要的数据流。匿名管道 ...原创 2018-03-22 13:06:58 · 199 阅读 · 0 评论 -
进程间通信---消息队列
所谓消息队列,字面意思就是传递消息的队列,事实上也正是如此。消息队列提供了一种从一个进程向另一个进程发送一块具有类型的数据块的方法。那么什么是有类型的数据块呢? 先解释一下数据块,消息队列,首先它是队列,那么他可以使用顺序表或者链表两种常见的数据结构来实现。其次它是用于传递消息的队列,那么,肯定会频繁地往里边放消息,取消息,也就是说增、删操作比较频繁。很自然地,就应该想到使用链式结构来...原创 2018-03-26 19:25:26 · 181 阅读 · 0 评论 -
基础I/O----通过系统调用来操纵文件
简单回忆一下两个在C语言中用于文件的读写的函数size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); //用于从文件里边读数据 ptr:用于存储读取数据的空间 size:读取元素的大小 nmemb:读取元素的个数 stream:读取的那个文件size_t fwrite(con...原创 2018-04-14 17:07:57 · 227 阅读 · 0 评论 -
信号的捕捉与处理
前边已经详细介绍了信号的产生,经常说到的一句话应该是向进程发送一个信号,但是进程不是像人,可以自己去感知信号。那么,到底是怎么向通过什么方式将进程发送信号的呢?怎么样算是给进程发送了一个信号呢? 和红绿灯一样,信号其实也就是一种规定。在现实生活中,只有那些在相应领域里有着绝对话语权的人才能给出规定,比如一所学校的校长,能制定校规。那么电脑里边谁能制定规则呢?操作系统,毫无...原创 2018-04-09 17:36:55 · 2146 阅读 · 1 评论 -
熟悉编译器gcc/g++
本文说是为了熟悉gcc/g++编译器,除此之外,还希望读者能对源程序被执行起来的整个过程有更深刻的理解。gcc和g++的用法差不多,本文就以gcc为例来讲解一个源程序被执行起来首先要经过四个步骤:预编译、编译、汇编、链接。预编译:1)、宏替换与删除。将代码中展开所有的宏,并将所有的#define宏定义删除 2)、文件包含。引入包含的头文件。 3)、条...原创 2018-04-09 21:52:53 · 335 阅读 · 0 评论 -
僵尸进程&孤儿进程
僵尸进程僵尸状态是一个比较特殊的状态,当进程退出并且父进程没有读取到子进程退出的相关信息就会产生僵尸进程。(可以理解为孩子死了还有遗言没有说给父亲听,导致有一口气一直咽下去,就变僵尸了)僵尸进程会以终止状态保持在进程表中,并且会一直等待父进程读取退出状态代码。即只要子进程退出,父进程还在进行,但父进程没有读取子进程状态,子进程就会一直保持在 僵尸状态(Z状态)。接下来用代码来体现一下这个过程#in...原创 2018-03-27 16:59:43 · 334 阅读 · 0 评论 -
Debug和Release的区别以及obj文件的作用
Debug和Release的区别Debug:调试版本,包含调试信息,所以容量比release大很多,并且不进行任何优化,(优化会使调试复杂化,因为进行优化肯定会进行一些额外的处理,这样就导致了源代码和生成的指令间关系变得更加复杂),便于程序员调试。Debug模式下生成两个文件,除了.exe 或 .dll 文件外,还有一个.pdb文件,该文件记录了代码中断点等调试信息。Release:发...原创 2018-08-24 11:15:28 · 1956 阅读 · 0 评论