4 Fireplusplus

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 2w+

Linux内存管理——内核内存管理

前言 linux内存管理可以分为两部分,内核内存管理,进程内存管理。由于一些条件的限制,比如内核分配内存时不能睡眠,不能像用户空间那样奢侈的使用内存,内核的内存分配与用户空间的内存分配是不太一样的,本文据此大概讨论下内存管理机制。页内核把页作为内存管理的基本单元,尽管cpu的最小可寻址单位为字节。内存管理单元(MMU)用页表对页进行管理,并且负责将物理内存映射为虚拟内存。一般体系结构不同,对应的页的大小也是不一样的,比如32为x86的环境,页的大小通常为4KB,64位体系结构一般支持8...

2020-06-27 11:40:27

记第一次提交patch给开源项目的经历

近期由于工作的原因接触到了openldap的开源库,在一次偶然的代码review的情况下发现了一个内存泄漏的bug。对,不是测试发现的,是代码审核看出来的。问题代码该项目github源码路径为:https://github.com/openldap/openldap/blob/OPENLDAP_REL_ENG_2_4_49/libraries/liblunicode/ucstr.c为方...

2020-03-29 12:07:26

centos下创建虚拟网卡

虚拟网卡Tun/Tap较高版本的linux大都自带了tun/tap 驱动程序用以实现虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装。利用tun/tap 驱动,可以将tcp/ip协议栈处理好的网络分包传给任何一个使用tun/tap驱动的进程,由进程重新处理后再发到物理链路中。Tun/Tap驱动程序工作原理做为虚拟网卡驱...

2020-01-01 12:51:44

用python发微博

前言前不久萌生了学习下python的想法,于是乎本着练手的目的做了这么个发微博的小玩意。注册新浪weibo允许第三方以应用的方式发布微博,所以我们首先要做的就是通过新浪微博开放平台注册一个应用:weibo_open打开上述平台的页面,用微博账号登录,然后点立即接入开始注册自己的应用,按提示操作即可。如下是我自己创建好的应用,名为share.cn:app...

2019-08-11 15:21:47

IO多路转接之epoll

#include #include #include #include #include #include #include #include #include int start_up(char* ip, short port){ int listen_sock = socket(AF_INET, SOCK_STREAM, 0); if (listen_sock < 0

2016-09-27 13:40:48

单例模式

设计模式是代码总结的经验,用来解决一类问题。单例类有两个特点:保证全局只有一个唯一实例提供了方便获取唯一实例的接口单例模式又分为懒汉模式和饿汉模式:(一般用在高并发环境下,所以保证线程安全并且高效很重要)懒汉模式:直到第一次调用接口才产生实例对象 // 懒加载,与COW思想一致,用到的时候才处理,提高效率class Singleton{public: static

2016-09-19 15:59:11

从轮子造起——SGI-STL空间配置器

引言人们常说,不要从轮子重新造起,要站在巨人的肩膀上。面对扮演轮子角色的这些STL组件,我们是否有必要深究其设计原理或实现细节呢?答案因人而异。从应用的角度思考,你不需要探索实现细节(然而相当程度地认识底层实现,对实务运用有绝对的帮助)。从技术研究与本质提升的角度来看,深究细节可以让你彻底掌握一切:不是为了重温数据结构和算法,或是想要扮演轮子角色,或是想要进一步扩张别人的轮子,都可因此获得

2016-09-15 15:48:43

TCP和UDP的区别

TCP和UDP都是TCP/IP协议簇中的协议,位于传输层,负责向两个主机中进程间的通信提供通用的数据传输服务。 传输控制协议TCP:提供面向连接的、可靠的数据传输服务,数据的传输单位是报文段。 用户数据报协议UDP:提供无连接的、尽最大努力的数据传输服务,数据传输的单位是用户数据报。TCP(Transmission Control Protocol,传输控制协议)是面向

2016-09-12 10:47:52

多线程还是多进程的选择及区别

鱼还是熊掌:浅谈多进程多线程的选择关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。 经常在网络上看到有的XDJM问“多进程好还是多线程好?”、“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有

2016-09-12 09:10:37

漫谈-线程

线程概念我们都知道,进程拥有独立的地址空间,进程之间共享数据需要通过进程间通信机制来实现。然而进程是单一执行流的,有些时候需要在同一个进程中执行多个控制流程,这时候线程就派上了用场。比如实现一个图形界面的下载软件,一方面需要和用户交互,等待和处理用户的鼠标键盘事件,另一方面又需要同时下载多个文件,等待和处理从多个网络主机发来的数据,这些任务都需要一个“等待-处理”的循环,可以用多线程实

2016-09-10 13:04:24

Linux下的定时计划任务——crontab

cron是一个Linux下的守护进程,用来定期的执行一些任务。要让cron执行你指定的任务,首先就要编辑crontab文件。命令:crontab -e刚进去提示选取一个编辑器,随意选,我习惯里用vim在这里面就可以编写要周期性执行的任务了。格式是这样的:          每项工作就占一行,总共六个字段。此外,还有一些辅助字符:          简单做个测试:

2016-09-09 17:16:00

聊天室

实现一个基于udp协议的网络群聊系统,可以完成多人的实时信息交互任务。其实就是类似于实现qq的群聊。系统环境Ubuntu 编辑器:vim 编译器:g++ 调试器:gdb 辅助编译工具:Makefile原理图首先说的是client:client要完成的功能当然首先就是数据的接收和发送了(都从server接收和发送给server),其次,作为一个client,没有一个窗口界

2016-09-05 12:43:08

为什么构造函数不能是虚函数

为什么构造函数不能是虚函数?首先,构造函数是用来构造对象的;其次,我们是通过对象内存中的虚表指针来调用虚函数的。那么,在对象还没有构造好的情况下,又去哪里找虚函数呢?所以构造函数不能是虚函数。

2016-09-04 16:39:07

Linux信号通识

何为信号信号是操作系统提供的一种向进程通知发生了某种特定事件的机制。它是一种异步的通知机制,用来提醒进程一个事件已经发生。当一个信号发送给一个进程,操作系统中断了进程正常的控制流程,此时,任何非原子操作都将被中断。直接看概念可能还是很模糊,所以从最简单的例子开始:用户输入命令,在Shell下启动一个前台进程用户按下Ctrl-C,这个键盘输入产生一个硬件中断如果CPU当前正在执行这个

2016-09-03 13:57:19

进程间通信之共享内存

何为共享内存共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共

2016-09-02 14:47:30

进程间通信之信号量

何为信号量信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识。信号量在此过程中负责数据操作的互斥、同步等功能。对信号量的操作当请求一个使用信号量来表示的资源时,进程需要先读取信号量的值来判断资源是否可用:大于0,资源可以请求,将信号量的值-1(P操作);等于0,无资源可用,进程会进

2016-09-02 13:58:17

客户端-服务器-代理模型

引言(声明:纯技术博客!)曾几何时,在国内还是可以访问google、faceboook、youtobe之类的网站的,后来由于防火墙的原因,导致我们不再能够访问这些网站了,不免为人生一大憾事!后来出于各种各样的需求,例如查找学习资料等,就有人想要翻墙了,于是就有了代理。原理代理实现的关键在于如何绕过防火墙,得先知道防火墙是如何阻止我们访问外网的?大致有以下三种手段:域名劫

2016-09-01 14:54:08

LInux目录与文件权限

首先,进入一个目录需要什么权限?在当前目录下穿件一个权限为000的目录dir用于测试:          当然现在肯定进不去,提示权限不够:          预计进入目录需要执行权限,加个x试试!          OK!一次成功,对于目录来说进入就是执行的意思。在目录里边touch一个file用来测试:          尴尬了,没有创建文件的权限,

2016-08-30 13:50:53

进程间通信之消息队列

何为消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值。我们可以通过发送消息来避免命名管道的同步和阻塞问题。消息队列与管道不同的是,消息队列是基于消息的,而管道是基于字节流的,且消息队列的读取不一定是先入先出。消息队列与命名管道有一样的不足,就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列

2016-08-29 16:21:59

进程间通信之管道篇

何为进程间通信每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都是看不到的。所以进程之间如果要交换数据就必须通过内核。在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。        进程间通信的本质,就是要让不

2016-08-28 14:22:55

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。