
Linux
后台服务器开发
这个作者很懒,什么都没留下…
展开
-
探索静态库与动态库的“奥秘”
探索静态库与动态库的“奥秘”什么是库?所谓“库”,就是稳定成熟的可以复用的代码;库从本质上来说是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a(linux)、.lib(windows))和动态库(.so(linux)、.dll(windows))。所谓静态、动态是指链接,可以看下编译链接的过程:库与可执行文件区别:库文件无法直接执行,从生产库的源码中可以查看出,源码是没有main函数,都是一些函数模块的定义和实现,由于没有主入口,所以无法直接运行库。原创 2020-10-24 07:59:47 · 265 阅读 · 0 评论 -
内存池设计与实现
内存池设计与实现一、前言作为C++程序员,想必对于内存操作这一块是比较熟悉和操作比较频繁的;比如申请一个对象,使用new,申请一块内存使用malloc等等;但是,往往会有一些困扰烦恼着大家,主要体现在两部分:申请内存后忘记释放,造成内存泄漏内存不能循环使用,造成大量内存碎片这两个原因会影响我们程序长期平稳的运行,也有可能会导致程序的崩溃;二、内存池内存池是池化技术中的一种形式。通常我们在编写程序的时候回使用 new delete 这些关键字来向操作系统申请内存,而这样造成的后果就是每原创 2020-05-12 13:54:35 · 589 阅读 · 0 评论 -
我们需要懂得CMake文件
我们需要懂得CMake文件一、前言 从事于linux下的C++开发的人员都知道,在C++下编写程序是没有类似windows下编译器的一键编译和运行的按钮,只能由我们开发人员进行手动编译、运行;为了减免这种繁琐而且复杂的劳动力,出现了makefile文件,makefile文件可以帮助我们很快的编译大量文件,最终形成可执行文件;其实编写makefile文件并不是很复杂,但是后面出现了cmak...原创 2020-03-29 14:28:31 · 4694 阅读 · 1 评论 -
linux服务器程序性能调试
linux服务器程序性能调试CPUCPU使用率:除了空闲时间外的其他时间占总 CPU 时间的百分比平均CPU使用率:1-(新得空闲时间-老空闲时间)/(总新的CPU时间-总旧的CPU时间)注:我们前面介绍的性能分析命令都是间隔一段时间的平均 CPU 使用率,所以要注意间隔时间的设置perf 简介及安装Perf 是内置于Linux 内核源码树中的性能剖析(profiling)工具。...原创 2020-03-21 09:51:06 · 415 阅读 · 0 评论 -
GDB不同文件断点调试
GDB不同文件断点调试作为一个linux下C/C++开发人员,调试工具是必不可少的一项技能,在windows平台,会有很多工具给我们用,比如VS,自带很强大的调试工具。当然,linux平台夜市毫不逊色,GDB工具是一个非常强大的代码调试工具。今天主要介绍的是GDB在多文件中的调试方法,不会一一介绍基础命令的。一、同一个目录中的文件现在,有三个文件,分别为main.cpp、test1.cp...原创 2019-12-22 21:41:28 · 715 阅读 · 0 评论 -
shell编程第六弹-运算符与函数
shell编程第六弹-运算符与函数流程控制这几个,都是最简单的基础,而且是比较繁杂,在编程中遇到的话,就查查文章,慢慢就熟练了。下面,给出链接,供大家参考,也给自己一个参考Shell 基本运算符:http://www.runoob.com/linux/linux-shell-basic-operators.htmlShell 函数:http://www.runoob.com/linu...转载 2018-11-24 10:07:45 · 187 阅读 · 0 评论 -
shell编程第五弹-参数传递
shell编程第五弹-参数传递参数传递是编程语言最常用的一个环节在执行 Shell 脚本时,可以向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……接下来,看一张图,这张图上面包含了大部分关于shell脚本的参数看实例: 1 #!/bin/bash 2 3 #参数个数 4 echo "...原创 2018-11-22 20:34:26 · 351 阅读 · 0 评论 -
shell脚本学习第四弹-管道与IO重定向
shell脚本学习第四弹-管道与IO重定向一、IO介绍什么是IO?简单的来说,IO就是输入输出;在unix里面,我们必须要标准输入,标准输出和标准错误。我们可以用程序运行过程来更明显说明:程序的输入就是标准输入,程序处理完之后,输出结果就是标准输出,或者报错就是标准错误。在shell编程里面,我们用cat命令就可以很好的解释这个标准输入和标准输出,请看案例:shell$ catcdc...原创 2018-11-21 20:40:12 · 265 阅读 · 0 评论 -
shell脚本学习第二弹-神奇的cd
shell脚本学习第二弹-神奇的cd前言:作为一个linux程序员,估计用的最多的命令就是cd了吧,我们试着用脚本编译一下: 1 #!/bin/bash 2 pwd 3 4 cd /home 5 pwd我们看一下结果:/data/shell/home但是我们本地的shell中执行pwd:/data/shell咦!!!什么鬼??相信这个问题大家也有人...原创 2018-11-16 09:09:19 · 659 阅读 · 0 评论 -
shell脚本学习第一弹
shell脚本学习第一弹作为一个linux程序员,不会shell的脚本的编写,可是不合格的呀!!!今天,我们一起来看看shell脚本的编写:别的先不说,先来一个入门级的案例: 1 #!/bin/bash 2 #当前路径 3 pwd 4 #打印hello 5 echo "hello"我们执行chmod +x hello.sh ./hello.sh结果:/h...原创 2018-11-14 20:51:33 · 193 阅读 · 0 评论 -
线程同步之互斥锁
线程同步之互斥锁 为什么要线程同步?当多线程共享相同的内存的时候,需要每一个线程看到相同的视图。当一个线程被修改时,其他的线程也可以修改或者读取这个变量,所以就需要对这些线程同步,保证不会访问到无效的变量。举个例子: 由此可见,线程同步的重要性。线程同步之互斥锁的函数:> 1. #include <pthread.h>> 2. int p...原创 2018-08-13 07:51:35 · 387 阅读 · 0 评论 -
shell脚本学习第三弹-变量的使用
shell脚本学习第三弹-变量的使用一、什么是变量相信大家听到变量这个词语很敏感吧,我们的C语言中也有所谓的变量,变量即在程序运行过程中它的值是允许改变的量。也可以这么说,变量的本质是一种键值对,举个例子来说:str=“123456”,“12345”就是键值对中的Value,str就是键值对中的Key值。二、shell变量的使用1.变量名以英文字母或者下划线开头,但是不能以数字开头...原创 2018-11-20 09:58:41 · 229 阅读 · 0 评论 -
shell编程第七弹-基本文本处理
shell编程第七弹-基本文本处理一、排序sortsort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。选项参数:-f :忽略大小写的差异,例如 A 与 a 视为编码相同;-b :忽略最前面的空格符部分;-M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;-n :使用『纯数字』进行排序(默认是以文字型态来排序的);-r :反向排序...原创 2018-11-27 15:34:59 · 175 阅读 · 0 评论 -
shell编程第八弹--实战(1)
shell编程第八弹–实战(1)一、文件操作 1 #!/bin/bash 2 3 #创建文件夹 4 #检查文件夹是否存在 5 if [ ! -d "wz" ];then 6 mkdir wz 7 else 8 echo "dictory is exist" 9 fi 10 11 #拷贝所有的文件到文件夹 12 13 if [ ! -f "wz/...原创 2018-12-05 20:24:49 · 273 阅读 · 0 评论 -
Redis从入门到使用
初识Redis Redis是一款开源的、高性能的键-值存储(key-value store)。它常被称作是一款数据结构服务器(data structure server)。 Redis的键值可以包括字符串(strings)类型,同时它还包括哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等数据类型。 对于这些数据类型,你可以执行原...原创 2019-03-03 13:25:53 · 221 阅读 · 0 评论 -
mysql->redis同步
hello,大家好,今天看到一篇redis相关的文章,我自己专门把代码搞到跑了一下,还是不错的,对于我们平时使用redis和mysql同步还是很不错的,工作中也是可以去使用的,因为这个确实会比我们去使用代码的方式去读取数据库再次插入到redis中,效率会高的多。1.开发环境开发环境:linxu开发语言:C/C++ mysql使用的库:hiredis2.redis通信协议(1...原创 2019-06-16 21:34:36 · 1023 阅读 · 0 评论 -
crontab使用方法
如果你“假装”对工作感兴趣,这种态度往往会使你的兴趣弄假成真。这种态度还能减少疲劳、紧张和忧虑。 除了身体的运动,我们更需要的是精神、心智上的运动,以便促使我们付诸行动。 每天时时跟自己交谈,可以引导自己思考什么是勇气和幸福,什么是平安和力量;每天跟自己谈些需要感谢的事,这样,你的心灵就会海阔天空,快乐欢畅。 去假装,或者怎样。从中体会到其中的趣味才是关键。——戴尔·卡耐基《人性的弱...原创 2019-06-17 22:30:58 · 653 阅读 · 0 评论 -
GDB不同文件断点调试
GDB不同文件断点调试作为一个linux下C/C++开发人员,调试工具是必不可少的一项技能,在windows平台,会有很多工具给我们用,比如VS,自带很强大的调试工具。当然,linux平台夜市毫不逊色,GDB工具是一个非常强大的代码调试工具。今天主要介绍的是GDB在多文件中的调试方法,不会一一介绍基础命令的。一、同一个目录中的文件现在,有三个文件,分别为main.cpp、test1.cp...原创 2019-08-03 09:04:18 · 3670 阅读 · 0 评论 -
C++异常
C++异常一、什么是异常用官方的话来说就是程序在执行过程中产生的问题,换句通俗的话来讲就是程序执行的出现的异常,比如程序崩了、内存泄漏了、数组越界以及其他异常信息的出现。二、异常处理C++中异常处理主要是使用三个关键字:try、catch和throw;throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。catch: 在您想要处理问题的地方,通过...原创 2019-09-15 15:03:28 · 443 阅读 · 1 评论 -
进程间通信之共享内存
进程间通信之共享内存一、共享内存的介绍 共享内存可以从字面上去理解,就把一片逻辑内存共享出来,让不同的进程去访问它,修改它。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一...原创 2018-08-08 07:20:11 · 711 阅读 · 0 评论 -
进程间通信之管道
进程间通信之管道 一、管道的概念 1.本质 (1)内核缓存区 (2)伪文件——不占用磁盘空间 2.特点 (1)两部分: (2)读端,写端,对应两个文件描述符 (3)数据写端流入,读端流出 (4)操作管道的进程被销毁之后,管道自动释放 (5)管道默认阻塞的 3.管道的原理 1.内部实现的方式:队列 环形队列 特点:先进先出 缓冲区大小: - 默认4K ...原创 2018-08-03 06:57:46 · 246 阅读 · 0 评论 -
条件判断
bash实现条件判断条件测试类型:1.整数测试2.字符测试3.文件测试整数比较: -eq 测试两个整数是否相等; 相等为真,不等为假-ne:测试两个整数是否不等-gt:测试一个数是否大于另一个整数-lt: 测试一个数是否小于另一个数-ge:大于或等于-le: 小于或等于文件测试表达式:[ express ]或 [[ expres原创 2016-11-01 23:04:48 · 406 阅读 · 0 评论 -
shell变量
shell变量在shell中默认都是字符串Shell弱变量编程语言强:变量在使用前必须先声明,还需要初始化弱:变量用时声明就行bash环境变量类型:环境变量export VARNAME = VALUR; “导出”脚本在执行时会启动一个子shell进程命令行中启动的脚本会继续继承当前shell环境变量系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变原创 2016-11-01 23:01:34 · 251 阅读 · 0 评论 -
正则表达式
正则表达式主要功能是文本查询和字符串操作,它可以匹配文本的一个字符或字符集合。符号:1.“*”匹配前面一个普通字符的0次或者 多次重复2.“.”匹配任意一个字符3.“^”匹配行首,表示行首的字符“^”字符后面的那个字符4.“$”匹配行尾,与“^”相反5.“[]”匹配字符集合6.“\”转义符7.“\”精确匹配符号,该符号利用“\”符号屏蔽“”符号。8.“\原创 2016-10-29 20:27:50 · 247 阅读 · 0 评论 -
while循环
while循环结束标志控制while循环基本语法:read variablewhile [[ “$variable” != sentinel ]]doread variabledone脚本例子:猜1-10内的数字 1 #!/bin/bash 2 3 echo "please input the num(1-10):" 4 read num原创 2016-11-09 11:07:45 · 485 阅读 · 0 评论 -
for循环
for循环带列表的循环:语法格式:for variable in {list}docommandcommand.....done脚本:for循环显示3次 hello,shell #!/bin/bash 2 # 3 for variablel in 1 2 3 4 do 5 echo "hello,shell" 6 do原创 2016-11-09 10:23:08 · 340 阅读 · 0 评论 -
测试及特殊变量
测试及特殊变量退出状态:状态值含义0表示运行成功1-125表示运行失败,脚本命令,系统命令错误或参数传递错误126找到命令但是无法执行127未找到要运行的命令>128命令被系统强行结束原创 2016-11-09 09:09:29 · 337 阅读 · 0 评论 -
makefile教程
陈皓 (优快云)概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写ma转载 2016-09-25 21:54:45 · 300 阅读 · 0 评论 -
Linux 进程与线程
Linux 进程与线程进程由内核和内核上运行的一系列进程所组成一个CPU上运行一个进程,多进程的意思是:在一个CUP中可以多个进程,(即多进程)但是是相互切换,但是会造成性能损失,也就是说一个时间点只能运行一个进程。 程序执行在内存里面,进程描述在内核里面。 线程:轻量进程,是程序执行中最小单元。同一个进程中多个进程可以并发执行。 Ready:准备运行S原创 2016-06-24 23:20:59 · 339 阅读 · 0 评论 -
硬连接和软连接
1>什么是链接? 链接操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称。对于这个新的文件名,我们可以为之指定不同的 访问权限 ,以控制对信息的共享和安全性的问题。 如果链接指向目录,用户就可以利用该链接直接进入被链接的目录而不用打一大堆的路径名。而且,即使我们删除这个链接,也不会破坏原来的目录。2>硬链接 硬链接只能引用同一文件系统中的文件。它引用的原创 2017-07-24 16:39:34 · 359 阅读 · 0 评论 -
vim配置以及使用
设置 Vim编辑环境 配置 有两种方式:1,是在/etc/vimrc 进行设置,这种设置方法会作用与所有登录到Linux环境下的用户。不建议使用。 2,在用户登录的 ~ 目录下创建一个 .vimrc文件,在其中进行自己习惯的编程环境的设置,这样当别的用户使用实并不互相影响。具体方法: 在文件中输入:1234转载 2017-08-04 17:12:36 · 283 阅读 · 0 评论 -
线程创建
线程创建 1.线程的概念线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。 一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。 进程——资源分配的最小单位,线程——程序执行的最小单位” 进程有独立的地址空间,一个进...原创 2018-08-11 07:43:52 · 201 阅读 · 0 评论 -
进程间通信之消息队列
进程间通信之消息队列首先,我们来说一下什么是消息队列: 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。一、函数原型msgget函数原型:int msgget(key_...原创 2018-08-06 07:42:03 · 4330 阅读 · 1 评论 -
信号通道
信号通道 1.kill函数 功能描述: 用于向任何进程组或进程发送信号。#include &amp;lt;sys/types.h&amp;gt;#include &amp;lt;signal.h&amp;gt;int kill(pid_t pid, int sig);参数: pid:可能选择有以下四种pid大于零时,pid是信号欲送往的进程的标识。pid等于零时,信号将送往所有与调用ki...原创 2018-08-10 07:26:47 · 1201 阅读 · 0 评论 -
简单易懂的makefile
Makefile之前转载过一篇makefile的编写教程,但是似乎可读性并不是那么高,所以以自己的总结和学习来谈谈mkfile怎么编写。1.首先,我们来看一下make make是linux自带的构建器,构建的规则在makefile中,编译器是使用gcc。 2.makefile的命名规则 - makefile - Makefile3.makefile的规则 gcc a.c b....原创 2018-07-27 22:04:29 · 315 阅读 · 0 评论 -
进程间通信之信号量
转:https://blog.youkuaiyun.com/ljianhui/article/details/10243617进程间通信之信号量这篇文章将讲述别一种进程间通信的机制——信号量。注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物。有关信号的更多内容,可以阅读我的另一篇文章:Linux进程间通信——使用信号。下面就进入信号量的讲解。一、什么是信号量 为了防止出现因多...转载 2018-08-09 07:01:12 · 320 阅读 · 0 评论 -
孤儿进程与僵尸进程
孤儿进程与僵尸进程 <1>孤儿进程 概念:父进程已经退出,只剩子进程,所以子进程变成孤儿进程,init进程变成孤儿进程的父进程;目的是为了释放用户区空间,自己释放不了PCB,需要由父进程来释放。 这个需要我们使用代码来验证一下: 产生孤儿进程最简单的方法就是:让父进程提前结束进程,所以让子进程sleep(1),保证父进程先结束进程。 1 #include<s...原创 2018-07-22 23:10:03 · 411 阅读 · 0 评论 -
valgrind
由于最近面试,自己曾经写了一个内存泄漏检测工具,但是面试的时候,面试官经常会问到还有其他办法去检测内存,按照我的思维来说有那么几种办法:1. 由于我的开发环境是linux,可以利用命令行去检测,我们最常用的命令就是:***free,top***,这两命令用的比较多,可以看到内存使用情况,但是缺点也很大:比如内存泄漏的时候,泄漏比较慢,所以很难看出来。2. 在程序中标点,记录***new/d原创 2017-12-18 21:33:08 · 329 阅读 · 0 评论 -
Linux 程序内存空间布局
linux内存分布原创 2017-12-18 19:47:40 · 429 阅读 · 0 评论 -
初识Linux
一:初识linux建议:初学者不习惯linux系统,最好在window系统下装虚拟机来进行熟悉linux,这样可以更好地熟悉和练习相关命令,而且不会影响到电脑的正常运行。虚拟机:VMware推荐书:鸟哥的linux私房菜 注:在linux中一切都是文件二:了解计算机比如计算机的硬件CUP:主要以AMD和intel俩款为,AMD性比价高,但是散热稍逊一筹,int原创 2016-06-24 23:12:16 · 282 阅读 · 0 评论