
Linux
文章平均质量分 62
TLpigff
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Docker容器与容器云学习笔记——client与daemon(一)
1. docker的整体工作流程docker本身其实是一个server的形式存在着的,叫做docker daemon,也叫做dockerd,那么怎么与这个server进行通信呢?当然想到要用一个client客户端,client客户端有很多种形式,比如我们经常在命令行敲的docker工具,它就是一个client,另外比如windows或mac系统装的桌面版docker,那也是客户端(这个也可以操控...原创 2020-04-10 11:37:06 · 1414 阅读 · 0 评论 -
Docker容器与容器云学习笔记——cgroup
cgroups(control groups)资源控制组,它不仅可以限制被namespace隔离起来的资源,还可以为资源设置权重、计算使用量、操控任务(进程或线程)启停等。一般来说,cgroup(单数形式)用于指定整个功能,当需要明确表示多个资源控制组的时候,用cgruops(复数形式)。以下根据Docker容器与容器与描述统一使用cgroups1. cgroups是什么官方定义如下:内...原创 2020-04-09 10:29:25 · 921 阅读 · 0 评论 -
Docker容器与容器云学习笔记——namespace
namespace隔离资源的6个方面namespace系统调用参数隔离内容隔离目的UTSCLONE_NEWUTS主机名与域名以便在网络中标识自己IPCCLONE_NEWIPC信号量、消息队列和共享内存以便进程间通信PIDCLONE_NEWPID进程编号以便与宿主机的PID进行隔离NetworkCLONE_NEWNET网络设备、网络栈...原创 2020-04-07 20:52:22 · 1965 阅读 · 2 评论 -
Linux中ACM时间及其修改以及CD指令的权限
ACM时间是Linux中输入stat+文件名的指令之后 能够输出的三个时间,分别是Access,Modify以及Change三个时间。Access:文件最近访问时间Modify:文件的内容最近修改时间Change:文件属性最近修改时间这三个时间对操作系统来说是非常重要的,下面来讨论一下如何修改这三个时间。touch不仅可以用来创建空文件,还可以用来修改时原创 2017-03-19 22:58:29 · 629 阅读 · 0 评论 -
Ubuntu16.04安装boost库
到boost官网安装一个boost库的压缩包,我下的是1.67.0版本执行下面的命令解压tar -xzvf boost_1_67_0.tar.gz 解压出来以后,进入解压出来的文件夹,执行下面的命令sudo ./bootstrap.sh在执行下面的命令,这样头文件就被默认安装在/usr/local/include头文件下,库文件就被默认安装在/usr/local/lib下sudo ./b2 ins...原创 2018-07-02 19:24:03 · 36267 阅读 · 8 评论 -
C++的html模板库——google-ctemplete
C++也能用来写网页,Google的大佬们开发的google-ctemplete,就是一个很好的用于写网页的库。一.下载安装包下载地址:点击打开链接点开之后直接点击download下载就完事了二.安装首先解压安装包,完了以后./configuremakesudo make install这时因为我们在./configure时没有加上选项给上安装的路径,就自动安装到/usr/local/lib库中了...原创 2018-06-27 17:06:53 · 3661 阅读 · 1 评论 -
正则表达式
正则表达式目的(最初是由Linux的sed和grep发展而来) 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”) 可以通过正则表达式,从字符串中获取我们想要的特定部分。 目的 验证: 表单提交时,进行用户名密码验证。 查找: 从大量信息中快速提取指定内容。在一批url中,查找指定url 替换: 将指定格式的文本,进行正则匹配查找,找到之...原创 2018-07-16 17:56:29 · 289 阅读 · 0 评论 -
Vim插件 —— vim-surround
vim-surround是一款强大的更改成对符号的Vim插件,用Vundle安装非常的方便,这里来直接说一说用法。1.ds (删除一对符号) 用法:ds + 要删除的符号("Hello World!") ds( "Hello World!"2.cs(更改一对符号) 用法:cs + 原本的符号 + 更改后的符号("Hello World!") cs"' ...原创 2018-06-28 15:12:08 · 1018 阅读 · 0 评论 -
libcurl开源库实现C++爬虫
libcurl是一个免费且易于使用的客户端URL传输库,是一个轻量级的HTTP编程库,很好使用,curl也是Linux下一个非常著名的下载库,通过这个库,可以很简单的实现文件的下载等操作。当然我们可以用它来实现一个简易的C++爬虫(不是Python才能爬虫的哦=_=)一.安装libcurl库sudo wget http://curl.haxx.se/download/curl-7.35.0.tar...原创 2018-07-14 11:18:30 · 5396 阅读 · 2 评论 -
gcc中-pthread和-lpthread的区别
用gcc编译使用了POSIX thread的程序时通常需要加额外的选项,以便使用thread-safe的库及头文件,一些老的书里说直接增加链接选项 -lpthread 就可以了而gcc手册里则指出应该在编译和链接时都增加 -pthread 选项编译选项中指定 -pthread 会附加一个宏定义 -D_REENTRANT,该宏会导致 libc 头文件选择那些thread-safe的实现;链接选项中指...原创 2018-07-15 13:50:36 · 1721 阅读 · 0 评论 -
基于百度brpc框架的简易站内搜索引擎
因为之前坐了一个网站,完成了简单的站内搜索的功能,但是效率太低,每次都要从数据库中提取数据出来。于是花了一点时间改善了这个站内搜索的功能,通过倒排索引和正排索引来实现搜索功能。注意:本项目用到的库都需要自行安装(cppjieba,jsoncpp,brpc,gflags,protobuf,leveldb),后三个是brpc要求安装的思路:一.首先实现一个制作索引的线下程序从数据库中先...原创 2018-07-28 12:26:34 · 2525 阅读 · 0 评论 -
Linux下创建一个线程占用多少内存
在前面的博客进程分配资源中,我们了解到,在32位平台下,系统会给一个进程分配4G的虚拟内存供进程使用。因此,我们知道,一个进程被创建时将被分配有4G的虚拟内存。事实上,并不是每次都会用完这4G内存的,下面的例子可以看到。#include <stdio.h>#include <unistd.h>int main(){ while(1){ ...原创 2018-09-08 12:57:34 · 13018 阅读 · 3 评论 -
Linux中最多有多少进程?一个进程最多有多少线程?
我们都知道进程的概念,它是CPU分配资源的载体,是程序运行的实例;也知道线程的概念,它是程序执行的最小单元,是进程中的一个实体用来执行程序,一个进程中有多个线程。既然如此,我们可以想象,一个系统中的进程数量肯定是有上限的,不然系统资源就会不够用了,同样的道理,一个进程中的线程资源也是有上限的。那进程和线程的上限到底是多大呢?Linux中最多可以有多少个进程?一.Linux中有一个命令可...原创 2018-09-08 12:57:04 · 18589 阅读 · 1 评论 -
PCB与进程分配资源
PCB(progress control block),进程控制块。这里先不讨论PCB是什么,其实进程这个概念本身就是一个很难理解的概念,当一个可执行程序被系统执行了以后,就变成了一个进程。那么这个进程中到底有什么东西呢,系统究竟给这个进程分配了哪些资源?另外,进程在内存中的存储是怎么样的?对于一个进程,它在被执行前其实是一个可执行程序。这个程序是被放在磁盘上的,当它要被执行的时候,它先被加载...原创 2018-08-29 23:46:26 · 12053 阅读 · 1 评论 -
虚拟内存与物理内存的联系与区别
操作系统有虚拟内存与物理内存的概念。在很久以前,还没有虚拟内存概念的时候,程序寻址用的都是物理地址。程序能寻址的范围是有限的,这取决于CPU的地址线条数。比如在32位平台下,寻址的范围是2^32也就是4G。并且这是固定的,如果没有虚拟内存,且每次开启一个进程都给4G的物理内存,就可能会出现很多问题:因为我的物理内存时有限的,当有多个进程要执行的时候,都要给4G内存,很显然你内存小一点,这很快就...原创 2018-08-30 11:55:36 · 96506 阅读 · 19 评论 -
Linux下用gdb调试程序
简单了解gdb gdb是UNIX及UNIX-like下用于调试程序的调试工具,它的功能非常强大,在Windows下调试多了的程序员会对gdb这样的调试工具感觉非常的不熟悉,但是在Unix下,它应该是最好的调试工具了。gdb主要功能启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)当程序被停住时,可以检查此时...原创 2018-03-04 19:30:21 · 254 阅读 · 0 评论 -
gdb调试多线程
以下是关于这次测试gdb调试多线程的代码#include <stdio.h>#include <pthread.h>void* thread1(void* arg){ printf("I am thread1,my tid is %u\n",pthread_self()); return NULL;}void* thread2(void* arg){ ...原创 2018-03-08 11:15:57 · 316 阅读 · 0 评论 -
Linux中线程的概念及创建应用
一.线程的概念 线程,是程序执行流的最小单元。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。 由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻...原创 2017-06-07 20:31:34 · 497 阅读 · 0 评论 -
线程的互斥锁和死锁问题
线程的同步与互斥及互斥锁之前我们介绍过了线程的概念,即是进程执行多种功能的分支。一个进程的两个线程共同访问公共资源的时候,可能会发生冲突,比如说,两个线程同时要对一个全局变量进行++操作,会发生什么问题呢? #include <stdio.h> #include <pthread.h> int count=0; void *thread_count...原创 2017-06-13 15:47:23 · 1834 阅读 · 0 评论 -
Linux中的五个数据段
进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途 不一而不尽相同,有些内存是事先静态分配和统一回收的,而有些却是按需要动态分配和回收的。对任何一个普通进程来讲,它都会涉及到5种不同的数据段。 下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的数据区都是干什么的。BSS段:BSS段(bss s原创 2017-09-18 11:31:12 · 1923 阅读 · 0 评论 -
我的Vim配置
” 语法高亮 set syntax=on” 自动缩进 set autoindent set cindent” Tab键的宽度 set tabstop=4” 统一缩进为4 set softtabstop=4 set shiftwidth=4” 不要用空格代替制表符 set noexpandtab” 在行和段开始处使用制表符 set smarttab” 显示行号 set number”原创 2017-11-15 13:49:15 · 247 阅读 · 0 评论 -
System V版本IPC进程间通信主题之消息队列
一.什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值。我们可以通过发送消息来避免命名管道的同步和阻塞问题。消息队列与管道不同的是,消息队列是基于数据块的(一次写多少,读到的就是多少),而管道是基于字节流的,且消息队列的读取不一定是先入先出。消息队列与命名管道有⼀样的不足,就是每个消息的最大长度原创 2017-06-11 21:47:19 · 283 阅读 · 0 评论 -
System V版本IPC进程间通信主题之共享内存
一.什么是共享内存 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说就是,进程不再通过执行进入内核的系统调用来传递彼此的数据它的工作原理可以用下图来解释: 两个不同的进程通过页表映射将其中的内容存储原创 2017-06-09 17:56:55 · 440 阅读 · 0 评论 -
Linux下的重要命令详解
Linux提供了大量的命令,利用命令可以完成大量的操作。下面对Linux中最重要的个命令作详解。根据它们在系统中的作用,分成六大部分: ◆ 安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last;◆ 文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln;◆ 系统管理相转载 2017-11-15 22:51:57 · 840 阅读 · 0 评论 -
Linux下彩色进度条的实现
在Linux下安装软件的过程中会出现一个进度条,它通过动态增加一些符号来表示安装进度。今天我们就来模拟实现一下一个进度条。在实现进度条之前,首先需要了解一些概念。 一.缓冲区 缓冲区分为三种:无缓冲,行缓冲和全缓冲。 无缓冲:指没有缓冲,立即显示信息。 行缓冲:输入输出遇到换行符才进行IO操作。 全缓冲:输入输出写满缓冲区才进行IO操作。我们在实现一个进度条的时候,如果每次输出符号的时候不原创 2017-12-06 13:14:47 · 1177 阅读 · 0 评论 -
Linux中的PCB——tast_struct
PCB的意思是进程控制块,在Linux下的PCB就叫tast_strcut结构体。下面我们就来调研一下这个 tast_strcut里面有什么。 先列出一些总体概括: 1.pid 2.状态:任务状态,退出代码,退出信号等。 3.优先级:相对于其他进程的优先级 4.程序计数器:即将被执行的下一条指令地址 5.内存指针:存放程序代码和数据的指针,还有和其他进程共享内存块的指针。 6.上下文原创 2017-12-06 16:26:40 · 940 阅读 · 0 评论 -
Linux下的基础IO操作
fopen,fwrite,fread,fclose,open,write,read,close原创 2017-12-15 15:12:36 · 4126 阅读 · 0 评论 -
浅谈文件描述符及文件系统
之前在讲IO操作的时候,其中系统级IO中的open,write,read,close都用到了文件描述符(file descriptor),其中open的返回值为文件描述符,write、read和close都是在传参的时候需要传文件的文件描述符。那么,文件描述符到底是个什么样的概念呢? 简单地来说,文件描述符就是一个小整数,它是非负数,最小值为0,操作系统内核利用文件描述符来访问文件。而实际上,它是原创 2017-12-17 14:57:01 · 3451 阅读 · 1 评论 -
System V版本IPC进程间通信主题之信号量
一.什么是信号量 信号量的本质是一个计数器外带一个等待队列,它主要是用于同步与互斥的。它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识。信号量在此过程中负责数据操作的互斥、同步等功能。 关于信号量结构体的伪代码如下struct semaphore{ int value; p原创 2017-06-08 21:41:30 · 410 阅读 · 0 评论 -
浅谈进程的创建函数fork及vfork
在Linux中,当我们需要创建一个进程的时候,常常会用到fork()函数,以及它的姐妹函数vfork(),下面我们就来谈一下这两个函数分别是在干什么。fork函数 fork函数是最常用的进程创建的函数,它从一个已知的进程中创建一个新的进程,新进程即为子进程,原来的进程即为父进程。函数基本的用法如下pid_t pid=fork();if(pid 0){ //进程创建失败原创 2018-01-25 11:42:47 · 371 阅读 · 0 评论 -
gdb调试多进程
之前我们介绍了gdb调试的相关命令与操作gdb调试命令,下面我们再来了解一下如何用gdb调试多进程。 事实上真正在运用上并不是只有一个进程在运行,多进程的方式能够达到很好的效率。gdb也可以调试多进程,但是在默认情况下,gdb只会调试主进程。但是通过设置参数follow-fork-mode(默认值为parent)和detach-on-fork(默认值为on)就可以调试多进程程序,这两...原创 2018-03-06 21:14:55 · 486 阅读 · 0 评论 -
生产者与消费者模型
生活中我们知道生产者与消费者之间的关系,生产者生产产品,消费者消费产品。在实际的软件开发中,也会遇到类似的情形:一个模块产生数据,另一个模块负责处理这些数据。产生数据的模块就可以形象地被称为生产者,处理数据的模块则被称为消费者。 然而只有生产者与消费者,还不算是生产者/消费者模式。在现实生活中,生产者生产出了产品,一般则会有中间商来进货,进而再出售给消费者。所以在这个模型中,这个中间商则被形象原创 2017-06-25 13:10:53 · 504 阅读 · 0 评论