自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

志存高远

专注于C/C++

  • 博客(190)
  • 资源 (6)
  • 收藏
  • 关注

原创 Linux网络编程--epoll模型ET触发模式之epolloneshot事件

epoll模型的ET模式一般来说只触发一次,然而在并发程序中有特殊情况的存在,譬如当epoll_wait已经检测到socket描述符fd1,并通知应用程序处理fd1的数据,那么处理过程中该fd1又有新的数据可读,会唤醒其他线程对fd1进行操作,那么就出现了两个工作线程同时处理fd1的情况,这当然不是我们期望看到的。那么下面我们就介绍epolloneshot事件,此规定操作系统最多触发其上注册的

2016-03-21 15:24:22 4716

原创 Linux网络编程--epoll模型之LT触发模式和ET触发模式

epoll对文件描述符有两种操作模式--LT(level trigger电平模式)和ET(edge trigger边缘模式)简单来讲,LT是epoll的默认操作模式,当epoll_wait函数检测到有事件发生并将通知应用程序,而应用程序不一定必须立即进行处理,这样epoll_wait函数再次检测到此事件的时候还会通知应用程序,直到事件被处理。而ET模式,只要epoll_wait函数检测到事

2016-03-21 14:38:46 4179 1

原创 Linux网络编程--sendfile零拷贝高效率发送文件

本博文介绍使用sendfile函数进行零拷贝发送文件,实现高效数据传输,并对其进行验证。那么什么是sendfile呢?linux系统使用man sendfile,查看sendfile原型如下:#include        ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);Sendfile

2016-03-11 15:24:11 15532 2

原创 Linux网络编程--定时器之时间堆

相比较时间轮,时间堆的效率更高,主要利用最小堆的思想实现。具体实现过程如下:#ifndef intIME_HEAP#define intIME_HEAP#include #include #include using std::exception;#define BUFFER_SIZE 64class heap_timer;struct client_data{

2016-03-10 15:40:58 1298

原创 Linux网络编程--定时器之时间轮

由于基于升序定时器链表的添加定时器效率偏低,所以本博文介绍一种高效的定时器---时间轮;时间轮:包含时间间隔si,时间轮槽数N,运行一周所用的时间是si*N。每一个槽就是一个无序的定时器链表,并且拥有统一的特征,定时时间相差N*si整数倍。时间轮的优势在于采用哈希表的思想,将定时器散列在不同的定时器链表中,这样插入定时器的效率不受定时器数目影响。那么很显然,要提高定时精度,si值越小越

2016-03-10 15:29:57 2038

原创 Linux网络编程--定时器的学习和使用

linux网络编程需要处理的重要事件之一--定时事件,对于服务器而言,管理着众多的客户端连接,高效稳定的管理这些客户端,定时事件是必不可少的,也对服务器的性能有着至关重要的作用。本博文先介绍简单的定时事件,以便于下一篇介绍高性能定时器做铺垫。1.使用setsockopt设置socket选项SO_RCVTIMEO和SO_SNDTIMEO这两个选项分别用来设置socket接收超时时间和发送超时

2016-03-10 14:25:52 3461

原创 libevent---主要函数

event_int(初始化libevent实例)struct event_base *event_init(void)初始化事件处理框架实例,内部调用event_base_new。event_base_new的主要逻辑:代码 1 struct event_base * 2 event_base_new(void) 3 { 4  5 //初始化小根堆

2016-03-08 15:10:16 1684

原创 libevent---核心event和event_base

结构体event和event_base是libevent的两个核心数据结构,前者代表一个事件对象,后者代表整个事件处理框架。1.event事件对象//event.hstruct event {TAILQ_ENTRY (event) ev_next; //已注册事件链表TAILQ_ENTRY (event) ev_active_next;//就绪事件链表TAIL

2016-03-08 14:58:34 1235

原创 libevent---源代码结构

Libevent 的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件、内部使用的头文件、辅助功能函数、日志、libevent 框架、对系统 I/O 多路复用机制的封装、信号管理、定时事件管理、缓冲区管理、基本数据结构和基于 libevent的两个实用库等几个部分,有些部分可能就是一个源文件。 (1)头文件 主要就是 event.h:事件宏定义、接口函数声明,主要

2016-03-08 14:49:30 873

原创 libevent入门---定时器程序

1、入门1.1、概述Libevent是一个用于开发可扩展性网络服务器的基于事件驱动(event-driven)模型的网络库。Libevent有几个显著的亮点: (1)事件驱动(event-driven),高性能;(2)轻量级,专注于网络,不如 ACE 那么臃肿庞大; (3)源代码相当精炼、易读; (4)跨平台,支持 Windows、Linux、*BSD和 Mac Os;

2016-03-08 14:35:47 2605

原创 stat,lstat,fstat三者的区别

int stat(const char *path, struct stat *buf);int lstat(const char *path, struct stat *buf);int fstat(int filedes, struct stat *buf);聪明人一眼就能看出来fstat的第一个参数是和另外两个不一样的,对!fstat区别于另外两个系统调用的地方在于,fsta

2016-03-08 14:01:56 4638

原创 libevent---socket异步编程

libevent的使用 --  socket异步编程这篇文章介绍下libevent在socket异步编程中的应用。在一些对性能要求较高的网络应用程序中,为了防止程序阻塞在socket I/O操作上造成程序性能的下降,需要使用异步编程,即程序准备好读写的函数(或接口)并向系统注册,然后在需要的时候只向系统提交读写的请求之后就继续做自己的事情,实际的读写操作由系统在合适的时候调用我们程序注册的

2016-03-04 15:34:18 1082

原创 核心系统账务基本知识

一、  核心账务1、 借贷记账法:有借必有贷,借贷必相等。  角度:发卡机构2、 资产=负债+所有者权益运营一段时间后资产=负债+所有者权益+收入-费用借贷平衡计算规则:费用+资产=负债+所有者权益+收入3、 资产(借记卡,增加为借记),负债(信用卡即贷记卡,增加为贷方)同一边的增减借贷方向相同,余额与增加方向相同。a、     gls1

2016-03-03 16:48:59 5062

原创 linux shell脚本读取用户输入的参数

$# 是传给脚本的参数个数$0 是脚本本身的名字$1是传递给该shell脚本的第一个参数$2是传递给该shell脚本的第二个参数$@ 是传给脚本的所有参数的列表例如:#!/bin/shecho "arg_num: $#"echo "shell_name: $0"echo "first_arg : $1"echo "second_arg : $2"

2016-03-02 13:37:00 11160

原创 des,d2des,d3des的区别

三重DES   因为确定一种新的加密法是否真的安全是极为困难的,而且DES的唯一密码学缺点,就是密钥长度相对比较短,所以人们并没有放弃使用DES,而是想出了一个解决其长度问题的方法,即采用三重DES。这种方法用两个密钥对明文进行三次加密,假设两个密钥是K1和K2,其算法的步骤如图5.9所示:   1. 用密钥K1进行DEA加密。   2. 用K2对步骤1的结果进行DES解密。

2016-02-17 17:27:45 3913

转载 linux消息队列的内核限制

消息队列:1.每次msgrcv一个消息,1.那个消息会在内核中移除 2.每次msgrcv都只会给一个消息出来,不管你rcv用多大的buf来接收,都是可以的。如果msgrcv的bufSize小于实际的该消息的大小,那么可以设置一个标志:表示截断。 如果不设置,那么会报错。取不出来。2.消息满了,则默认0为阻塞,直到有了空间位置,才能snd消息进入到内核。  消息空了,则默认为

2016-01-15 11:33:18 1145

原创 linux消息队列编程实例

前言:   消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向其中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息函数:1.创建新消息队列或取得已存在消息队列原型:int msgget(key_t key, int msgflg);参数:     ke

2016-01-11 18:10:25 1159

原创 深入理解C语言(包含oop的思想,内存和管理,I/O的实现)

语言只是一种工具,任何语言之间都是相通的,一通则百通,关键是要理解语言背后的思想,理解其思想,任何语言,拿来用就行了。语言没有好坏之分,任何语言既然存在自然有它存在的价值。  在一个到处是OOP的年代,为何面向过程的C语言依然可以如此活跃?这主要得益于C语言本身的语言特性。C语言小巧灵活,而且还有一个直接与硬件打交道的指针的存在,所以它是嵌入式开发唯有的高级语言;正因为他的小巧灵活,我们可

2016-01-11 17:31:55 2559

转载 Linux系统下安装rz/sz命令及使用说明

对于经常使用Linux系统的人员来说,少不了将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / sz命令很方便的帮我们实现了这个功能,但是很多Linux系统初始并没有这两个命令。今天,我们就简单的讲解一下如何安装和使用rz、sz命令。1.软件安装root 账号登陆后,依次执行以下命令:1cd /tmp

2016-01-05 13:59:02 1056

原创 怎么查看库文件是32位的还是64位的

如何查看静态库是32位的还是64位的对于动态库.so文件,我用file命令可以查看是ELF 64-bit LSB shared object。但对于.a文件,用file命令查看,只能.a: current ar archive怎么才能知道这个.a文件是32位的,还是64位的,谢谢。------解决方案-----------------------------------

2016-01-04 14:38:16 15419

原创 linux c加密和解密的例子

此方法利用按位异或的算法,按位异或就是指同位得1,异位得0;例如:2和1异或2的二进制是101的二进制是012^1的结果是00我们将2^1的结果00再次和1异或2^1的结果是001的二进制是01异或结果是10(也就是2)相信大家已经明白了我的意思了。先看一个固定的key(31)的算法#include

2016-01-04 11:23:19 5468 1

原创 .bash_profile和.bashrc以及profile的什么区别

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置./etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shel

2016-01-04 10:50:30 640

原创 ubuntu安装ssh和telnet服务器

如果经常需要给客户调试程序,还需要察看自己电脑上的程序,这个时候ssh服务器和telnet服务器就显得很重要了。只要自己电脑安装了ssh或者telnet服务器,可以在另一台电脑直接登陆自己的电脑,察看程序代码。一:安装ssh服务器1.安装ssh服务器端$ sudo apt-get install openssh-server2.启动ssh-server$ sudo

2015-12-31 13:52:45 1330

原创 Linux下卸载DB2数据库步骤

1.Remove DB【首先删除数据库】(1)su - db2inst1(2)db2 list db directory(3)db2 drop db 2.Remove Instance【删除实例】(1)su - root(2)cd /instance(3)./db2ilist(4)./db2idrop -f 3.Remove das【删除das】

2015-12-31 10:59:49 1927

原创 如何查看linux是32位还是64位

其实方法很简单1:终端输入:getconf LONG_BIT我的电脑显示:32  那么就是32位的操作系统2:终端输入:echo $HOSTTYPE我的电脑显示:i686 那么就是32位的操作系统,64位会显示X86_643:终端输入:uname -a 64位的显示Linux ps4 2.6.16.46-0.12-smp #1 SMP Thu M

2015-12-31 10:29:25 814

原创 DB2常用命令以及错误处理宝典

1、打开数据库db2 connect to 数据库名;2、查看数据库中有哪些表db2 list tables ;3、查看数据库中的表结构db2 describe table 表名;db2 describe table 表名 show  detail ;(详细的结构)4、查看表的索引db2 describe indexes for ta

2015-12-30 11:18:53 2362

原创 IOS UItextfield 和 UItextView 键盘隐藏

点击return隐藏ios 提供的键盘并不能自己隐藏,因此需要我们去实现UITextField.h文件实现UITextFileldDelegate.m文件中-(void)viewDidLoad{ textfield.delegate = self;}-(BOOL)textFieldShouldReturn:(UITextField *)text

2015-12-25 09:30:17 1066

原创 UITableViewController和UIRefreshControl实现下拉刷新功能

随着下拉刷新模式的影响力越来越大,苹果不得不考虑把它列入自己的规范之中,并在iOS 6 API中推出了下拉刷新控件. 在 iOS 6 之 后 , UITableViewController 添 加 了 一 个 refreshControl 属 性 , 这 个 属 性 保 持 了UIRefreshControl的一个对象指针。 UIRefreshControl就是iOS 6为表视图实现下拉刷新而提供

2015-12-24 11:25:03 721

原创 ios开发 UITableViewController和 UITableView

iOS中显示数据列表最常用的一个控件,支持垂直滚动UITableView 的两种内置样式UITableViewStylePlain UITableViewStyleGrouped数据源 (dataSource) 和代理 (delegate)l UITableView需要一个数据源(dataSource)来显示数据 ,UITableView会向数据源

2015-12-23 18:00:36 1791

原创 mysql中char与varchar的区别分析

在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定的长度,而varchar属于可变长的字符类型。char与varchar的区别 char (13)长度固定, 如'www.jb51.net' 存储需要空间 12个字符 varchar(13) 可变长 如'www.jb51.net' 需要存储空间 13字符,

2015-12-22 16:24:41 1471

原创 linux多线程编程---线程同步之互斥锁

假设存在这样一个情况:需要N个线程对一个全局的变量进行M次递增操作。首先想到的常常是,使用互斥量。话不多说,看代码:#include#include#define mutex_num 10#define test_count 2000000static volatile int count=0;pthread_mutex_t mutex;void *fun(void *arg){

2015-12-18 15:36:39 628

原创 replace into和insert into 的区别

平时我们使用export to和improt form命令的时候经常会使用insert into和replace into,那么两者有何区别呢?replace into 跟 insert into功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。

2015-12-17 14:45:18 13276

原创 DB2 insert语句三种格式

----start    有点SQL基础的人都会写INSERT语句,可是有很大一部分人不知道DB2的INSERT语句有三种格式,即:一次插入一行,一次插入多行和从SELECT语句中插入。考虑下面的情况:CREATE TABLE USER  (  NAME VARCHAR(20) NOT NULL,---姓名  BIRTHDAY DATE---生日  );  现在要求你插入一行数据,我们这么写:IN...

2015-12-17 14:35:29 37867

转载 DB2 在线分析处理(OLAP函数的使用)

----start说起 DB2 在线分析处理,可以用很好很强大来形容。这项功能特别适用于各种统计查询,这些查询用通常的SQL很难实现,或者根本就无发实现。首先,我们从一个简单的例子开始,来一步一步揭开它神秘的面纱,请看下面的SQL:[c-sharp] view plaincopyprint?SELECT      ROW_NUMBER() OVER(ORDER BY

2015-12-17 14:32:26 754

原创 数据库设计规范

数据库表命名规范 此规范包括表名命名规范,索引命名规范,外键命名规范和字段名命名规范。 表名命名规则 数据库表的命名以是名词的复数形式且都为小写,如cities, categories, friends等等 如果表名由几个单词组成,则单词间用下划线("_")分割,如subscribed_pois,poi_categories等 表名尽量用全名 CREATE TABL

2015-12-16 14:20:35 963

原创 vim 代码提示功能,让vim可以媲美IDE

vim是一款支持插件、功能无比强大的编辑器,无论你的系统是linux、unix、mac还是windows,都能够选择他来编辑文件或是进行工程级别 的coding。如果能把vim用好了,不仅编程效率能得到大幅度提高,周围人也会因此而看得头晕眼花佩服不已,自己心里当然也会心花怒放啦。下面就让我 来介绍一下如何来进行配置。这些配置所涉及到的内容有:autocomplpop, ctags, TagLi

2015-12-15 13:32:53 1039

原创 linux系统配置信息的查看

linux下看配置的方法一:cpu[root@srv /]# more /proc/cpuinfo | grep "model name"model name       : Intel(R) Xeon(R) CPU            X3220 @ 2.40GHzmodel name       : Intel(R) Xeon(R) CPU            X3220

2015-12-11 15:54:29 1270

原创 linux系统中,grep使用小技巧

linux系统中,利用grep打印匹配的上下几行                            grep -w 只匹配当前字符串      grep -n 输出结果显示行号                                                             如果在只是想匹配模式的上下几行,grep可以实现。              

2015-12-10 18:14:41 836

原创 linux awk 内置函数(算数,字符串,时间等函数)详细介绍(实例)

这节详细介绍awk内置函数,主要分以下3种类似:算数函数、字符串函数、其它一般函数、时间函数一、算术函数:以下算术函数执行与 C 语言中名称相同的子例程相同的操作:函数名说明atan2( y, x )返回 y/x 的反正切。cos( x )返回 x 的余弦;x 是弧度。sin(

2015-12-10 18:12:42 2493

原创 NSBundle(获取资源路径方法)的相关使用方法和注意事项

1、[NSBundle mainBundle],文件夹其实是Group,如左侧的树形文件管理器Build之后,文件直接就复制到了根目录下,于是读取的方法,应该是这样:[objc] view plaincopyNSString *earth = [[NSBundle mainBundle] pathForResource:@"Bra

2015-12-09 13:37:21 6543

vim配置文件vimrc

高大上的vimrc配置文件,包含自动补全代码功能哦

2016-01-11

sqlapi 源码

此文件夹中包含几个个文件,除了官方的g++程序和文档说明,还包含自己写的demo案例,以及封装的数据库函数,transAction和fetch和sqlapi的cpp文件,以及SQLAPI.h文件 1.transAction.cpp文件主要是关于事务的提交和处理的设置,自动提交or手动提交 2.fetch.cpp文件主要是关于api的基本操作,包括连接数据库,sql语句的执行,绑定sql语句参数的方法,获取结果的方法,以及结果中字段的处理,断开连接,以及异常的处理。 3.sqlapi.cpp文件主要测试数据库优化的性能,主要用于查询的速度的提升 4.SQLAPI.H文件是所有的功能函数的声明。

2016-01-11

cuit单元测试

CUnit是一种C语言单元测试框架 ,继Junit CppUnit的成功后, c语言环境下也出现了开发源码的白盒测试用例CUnit。CUnit以静态库的形式提供给用户使用,用户编写程序的时候直接链接此静态库就可以了。它提供了一个简单的单元测试框架,并且为常用的数据类型提供了丰富的断言语句支持。

2015-10-19

最新VMware 11安装Mac系统补丁unlocker203.zip

最新VMware 11安装Mac系统补丁unlocker203.zip

2015-08-12

小牛在线收益快捷计算

自已也是小牛在线的投资者,闲暇时写了一个计算收益的小软件,为小牛爱好者提供方便。

2015-08-03

struct和union计算方法

规则: 1,对于union,对齐的大小是最大的基本元素的对齐大小;对象的大小必须是该基本元素大小的整数倍; 2,对于struct,对齐的大小也是最大的基本元素的对齐大小,对象的大小需要考虑元素的对齐,并且需要是最大基本元素的整数倍;同时有#pragma pack修饰的情况,关于struct请详细参考另外一个帖子。 3,这里所说的struct和union的对齐,是指其作为其他复杂对象中的元素的时候要求的对齐,对于本身大小的计算并没有关系。本身的大小只和其所包含的基本元素的对齐有关系。

2015-07-22

空空如也

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

TA关注的人

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