自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wonder

Linux C/C++ Lua 服务器开发

  • 博客(28)
  • 资源 (11)
  • 收藏
  • 关注

原创 ubuntu中安装lua5.3

下载最新的lua5.3.1的tar包,下载地址:http://www.lua.org/ftp/,把下载的文件放到/usr/local/src/目录下。 然后输入以下命令:tar zxf lua-5.3.1.tar.gzcd lua-5.3.1make linux test则会自动安装好Lua解释文件,你会在src文件夹下发现多了几个文件。安装过程中可能会报错,没有readline什么的。解决办

2016-10-27 21:19:16 11314 1

原创 Ubuntu中安装vim插件

1、安装ctags执行命令:sudo apt-get install exuberant-ctags安装ctags 进入/usr/share/vim/vim74目录中执行:sudo ctags -R即可生成tags文件。 在~/.vimrc中添加一句set tags=/usr/share/vim/vim74/tags

2016-10-26 21:25:22 15701

原创 安装VMware Tools的方法

1.打开虚拟机,选择VM——>Install VMware Tools 2.此时桌面上会显示一个VMware Tools的光盘,该光盘在/media/VMware Tools目录下,把该目录下的VMwareTools-9.9.3-2759765.tar.gz文件拷贝到/tmp目录下 用tar xvzf VMwareTools-9.9.3-2759765.tar.gz命令解压文件,得

2016-10-26 17:36:29 22790 3

原创 lua中用table实现队列

当函数只有一个参数并且这个参数是字符串或者表构造的时候,()是可选的。 print “Hello World” <–> print(“Hello World”) f{x=10, y=20} <–> f({x=10, y=20})

2016-10-26 00:10:44 19705 1

原创 C++笔试题目总结

class Base2{public: virtual void init() { cout << "Base2::init" << endl; } Base2() { init(); }};class Drived :public Base2{public: void init() {

2016-10-16 09:28:56 14486

原创 Linux编程常用函数总结

1.打印日志函数#include <stdarg.h>#define SPIDER_LOG(level, format, ...) do{ \ if (level >= g_conf->log_level) {\ time_t now = time(NULL); \ char msg[MAX_MESG_LEN]; \ char buf[32];

2016-10-12 11:55:39 14531

原创 C++中advance的代码实现

template<typename IterT, typename DistT>void advance(IterT& iter, DistT d){ if(typeid(typenamestd::iterator_traits<IterT>::iterator_category) ==typeid(std::rand

2016-10-12 10:58:18 15508

原创 C++11 override 和 final

类被final修饰,不能被继承class A1 final { };class B1 : A1 { }; // “B1”: 无法从“A1”继承,因为它已被声明为“final”final:在类中用final关键字声明一个成员函数(在函数的后面添加该关键字,就像const一样),则该函数不能再被继承。它的作用是拒绝重载。final限定的函数必须是虚函数。在父类中。class A1{ virt

2016-10-11 20:56:40 14601

转载 shared_ptr基于引用计数智能指针实现

智能指针是什么简单来说,智能指针是一个类,它对普通指针进行封装,使智能指针类对象具有普通指针类型一样的操作。具体而言,复制对象时,副本和原对象都指向同一存储区域,如果通过一个副本改变其所指的值,则通过另一对象访问的值也会改变.所不同的是,智能指针能够对内存进行进行自动管理,避免出现悬垂指针等情况。普通指针存在的问题C语言、C++语言没有自动内存回收机制,关于内存的操作的安全性依赖于程序员的自觉。程序

2016-10-11 20:25:27 15867 1

原创 C++虚函数的缺点

虚函数有什么缺点或者析构函数声明为虚函数有什么缺点?大体原因如下:如果某个类不包含虚函数,那一般是表示它将不作为一个基类来使用。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为它会为类增加一个虚函数表,对象增加一个虚指针,使得对象的体积增大。所以基本的一条是:无故的声明虚析构函数和永远不去声明一样是错误的。实际上,很多人这样总结:当且仅当类里包含至少一个虚函数的时候才去声明虚析构函数

2016-10-11 16:00:15 17311

原创 Linux中用ps命令查看进程状态

Linux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生) 4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放) 5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGT

2016-10-10 21:17:53 47922 1

转载 进程状态

三态模型:在多道程序系统中,进程在处理器上交替运行,状态也不断地发生变化。进程一般有3种基本状态:运行、就绪和阻塞。 (1)运行:当一个进程在处理机上运行时,则称该进程处于运行状态。处于此状态的进程的数目小于等于处理器的数目,对于单处理机系统,处于运行状态的进程只有一个。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。 (2)就绪:当一个进程获得了除处理机以外的

2016-10-10 21:02:47 14361

原创 操作系统CPU上下文切换

在切换时,一个进程存储在处理器各寄存器中的中间数据叫做进程的上下文,所以进程的切换实质上就是被中止运行进程与待运行进程上下文的切换。在进程未占用处理器时,进程 的上下文是存储在进程的私有堆栈中的。  时间片对于CPU来说是很关键的参数,如果时间片太长,就会使系统的交互性能变差,用户感觉不到并行。如果太短,又会造成系统频繁的上下文切换,使性能 下降。对于IO Bound的系统来讲并不需要太长的时间片,

2016-10-10 20:16:01 16400

转载 C++之RAII惯用法

C++中的RAII全称是“Resource acquisition is initialization”,直译为“资源获取就是初始化”。但是这翻译并没有显示出这个惯用法的真正内涵。RAII的好处在于它提供了一种资源自动管理的方式,当产生异常、回滚等现象时,RAII可以正确地释放掉资源。 举个常见的例子:void Func() { FILE *fp; char* filename

2016-10-10 17:40:03 14193

原创 .bss .text .data .rodata

1、.bss段 BSS段(bsssegment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文BlockStarted by Symbol的简称。BSS段属于静态内存分配。2、.text段 代码段(codesegment/textsegment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读,某些架构也允许代码段

2016-10-10 15:27:58 7058

转载 多进程和多线程的应用场景

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

2016-10-09 19:09:56 20967

转载 C++构造函数失败

什么函数都有可能失败,构造函数也不另外,比如new一个对象或空间不成功。当构造函数失败的时候,其实很多时候我们不想这个对象被继续生成,这个时候就可以在构造函数里面抛出异常。C++规定构造函数抛出异常之后,对象将不被创建,析构函数也不会被执行,但已经创建成功的部分(比如一个类成员变量)会被部分逆序析构,不会产生内存泄漏。但有些资源需要在抛出异常前自己清理掉,比如打开成功的一个文件,最好关闭掉再抛出异

2016-10-08 19:44:55 21621

原创 Linux记录锁

记录锁的功能是:当一个进程正在读或者修改文件的某一个部分时,它可以阻止其他进程修改同一文件区。记录锁其实是 字节范围锁,因为它锁定的只是文件中的一个区域,也可能是整个文件。1.fcntl记录锁SVR3通过fcntl函数增加了记录锁功能。fcntl函数的原型已经在以前给出,这边再重复一次。#include<fcntl.h> int fcntl(int filedes, int cmd, .../

2016-10-08 15:33:59 14644

原创 alarm和pause函数

#include <unistd.h > unsigned int alarm(unsigned int seconds) ; 返回: 0或以前设置的闹钟时间的余留秒数 每个进程只能有一个闹钟时间。如果在调用 alarm时,以前已为该进程设置过闹钟时间,而且它还没有超时,则该闹钟时间的余留值作为本次 alarm函数调用的值返回。以前登记的闹钟时间则被新值代换。 如果有以前登记的尚未超过的闹钟

2016-10-05 10:30:34 28879

原创 Linux数据类型总结

sig_atomic_t 这个类型是定义在signal.h文件中。 当把变量声明为该类型会保证该变量在使用或赋值时, 无论是在32位还是64位的机器上都能保证操作是原子的, 它会根据机器的类型自动适应。在处理信号(signal)的时候,有时对于一些变量的访问希望不会被中断,无论是硬件中断还是软件中断,这就要求访问或改变这些变量需要在计算机的一条指令内完成。通常情况下,int类型的变量通常是原子访

2016-10-04 10:22:44 14701

原创 Linux core文件

1.core文件的生成开关和大小限制1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。 2)使用ulimit -c filesize命令,可以限制core文件的大小(filesize的单位为kbyte)。若ulimit -c unlimited,则表示core文件的大小不受限制。如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整

2016-10-03 10:39:19 14560

原创 可重入函数与不可重入函数

不可重入函数: ( a )已知它们使用静态数据结构 ( b )它们调用m a l l o c或f r e e ( c )它们是标准I / O函数。标准I / O库的很多实现都以不可重入方式使用全局数据结构。因为每个线程只有一个e r r n o变量,所以我们可能修改了其原先的值。考虑一个信号处理程序,它恰好在 m a i n刚设置e r r n o之后被调用。如果该信号处理程序调用r e a

2016-10-03 08:53:31 14396

原创 Linux信号总结

SIGTSTP与SIGSTOP都是使进程暂停(都使用SIGCONT让进程重新激活)。唯一的区别是SIGSTOP不可以捕获。 捕捉SIGTSTP后一般处理如下: 1)处理完额外的事 2)恢复默认处理 3)发送SIGTSTP信号给自己(使进程进入suspend状态)

2016-10-02 21:11:52 14466

原创 孤儿进程组

孤儿进程组(orphaned process group)定义为:该组中每个成员的父进程或者是该组的一个成员,或者不是该组所属对话期的成员。对孤儿进程组的另一种描述可以是:一个进程组不是孤儿进程组的条件是:该组中有一个进程,其父进程在属于同一对话期的另一个组中。如果进程组不是孤儿进程组,那么在属于同一对话期的另一个组中的父进程就有机会重新起动该组中停止的进程。

2016-10-02 20:49:22 14488

原创 进程组、会话、控制终端、作业

1、进程组 同一进程组的各个进程接收来自同一终端的各种信号,每个进程由唯一的进程组id,利用getpgrp()或者getpgid(pid)来获取进程组id,每个进程中有一个组长进程,组长进程的id就是进程组的id,只有进程组中有一个进程存在该进程组就不会消失,与进程组长存在与否无关。某个进程组中的最后一个进程可以终止,也可以参加另一个进程组。 int setpgid(pid_t p i d, p

2016-10-02 15:41:57 14608

原创 哈希结构的缺点

哈希表也有一些缺点:它是基于数组的,数组创建后难于扩展,某些哈希表被基本填满时,性能下降得非常严重,所以程序虽必须要清楚表中将要存储多少数据(或者准备好定期地把数据转移到更大的哈希表中,这是个费时的过程)。而且,也没有一种简便的方法可以以任何一种顺序〔例如从小到大〕遍历表中数据项。如果需要这种能力,就只能选择其他数据结构。

2016-10-02 01:08:42 16635

原创 NAT协议

NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。简单的说,NAT就是在局域网内部网络中使用内部地址,而当内部节点要与外部网络进行通讯时,就在网关(可以理解为出口,打个比方

2016-10-01 23:39:45 15079

原创 TCP协议如何保证可靠传输

1、应用数据被分割成TCP认为最适合发送的数据块。 2、超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。 3、TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。 4、校验和:TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有

2016-10-01 18:43:57 31902

vs2013源码编译的libcurl7.49.1动态库

vs2013源码编译的libcurl7.49.1动态库,包括debug和release版的dll和lib

2016-07-23

php mysql apache数据库课程设计博客留言系统

php mysql apache数据库课程设计 博客留言系统,这是源代码,直接可用

2016-05-13

C++图书管理系统课程设计

C++图书管理系统课程设计,包括程序源码和报告,程序绝对可用,报告详细!

2015-07-04

C_C++编程_100个经典算法

C语言和C++很经典的算法

2014-12-11

把SD卡修改成nand flash+Fatfs+USB

教你如何把SD卡和Fatfs修改成nand flash和Fatfs

2014-12-11

STM32中断优先级与相关使用概念

STM32中断优先级与相关使用概念

2014-12-04

关于STM32的IAP总结

关于STM32的IAP总结

2014-12-04

nand flash+USB模拟U盘

nand flash+USB模拟U盘

2014-12-04

原子教你玩stm32寄存器版

原子教你玩stm32寄存器版

2014-11-10

《ZigBee实战演练》

《ZigBee实战演练》,讲解ZigBee的好教程

2014-11-10

单片机控制数码管、点阵、矩阵键盘联合扫描

单片机控制数码管、点阵、矩阵键盘联合扫扫描,按下矩阵键盘上的键,数字显示在数码管和点阵上。

2014-08-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除