批量转换换行符CRLF到LF

关闭Git自动转换功能

1
git config --global core.autocrlf false

阅读全文

Flag

重要的事情说三遍

  • 做完功能要自测!!!
  • 做完功能要自测!!!

阅读全文

Linux shell语言——dash和bash

什么是bash ?

Bash(GNU Bourne-Again Shell)是许多Linux平台的内定Shell,事实上,还有许多传统UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等等。

GNU/Linux 操作系统中的 /bin/sh 本是 bash (Bourne-Again Shell) 的符号链接,但鉴于 bash 过于复杂,有人把 bash 从 NetBSD 移植到 Linux 并更名为 dash (Debian Almquist Shell),并建议将 /bin/sh 指向它,以获得更快的脚本执行速度。Dash Shell 比 Bash Shell 小的多,符合POSIX标准。

阅读全文

单生产者单消费者环形缓冲

头文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#ifndef _SIMPLE_LOOP_BUFFER_H__
#define _SIMPLE_LOOP_BUFFER_H__

#include "gntype.h"
#include "gnmutex.h"
#include "gnlock.h"
#include "server_define.h"
using namespace Storm;

typedef struct _tagBlock
{
_tagBlock()
{
memset(pBuffer, 0, sizeof(char)*(MAX_CACHE_PACKET_SIZE + 1));
}
~_tagBlock() {};

char pBuffer[MAX_CACHE_PACKET_SIZE + 1];
char* GetBuff() { return pBuffer; }
int32 GetBuffLen() { return MAX_CACHE_PACKET_SIZE + 1; }
}CBlock;

class CSimpleLoopBufferEx
{
public:
CSimpleLoopBufferEx();
~CSimpleLoopBufferEx();

void Clear();

/**
* @brief
* 初始化循环缓冲区
* @param nSize : 初始化虚幻缓冲区的大小,实际大小为nSize+1
* @return 成功返回true,失败返回false
*/
bool Init();

/**
* @brief
* 将需要存储的Buffer拷贝到循环缓冲区的结尾
* @param pData : [输入参数]指向需要插入循环缓冲区的Buffer起始位置
* @param nLen : 指向需要插入的Buffer的长度
* @return 如果循环缓冲区拥有的大小大于等于nLen,返回true,否则返回false
* @remark 此函数不是线程安全的
*/
INT32 PushBack(const CHAR *pData, INT32 nLen);

/**
* @brief
* 从循环缓冲区的起始位置取nLen长度的Buffer,拷贝放入Buffer中
* @param pBuf : [输入输出参数]获取数据的Buffer的起始指针
* @param nLen : 需要读出的Buffer长度
* @return 如果有足够所需读出的数据,返回true,否则返回false
* @remark 此函数不是线程安全的
*/
INT32 PopFront(CHAR * &pBuf, INT32 nLen,CHAR* szData);

/**
* @brief
* 丢弃nLen长度的数据
* @param nLen : 需要丢弃的长度
* @return void
* @remark 此函数不是线程安全的
*/
bool DiscardFront(INT32 nLen);

/**
* @brief
* 获取剩余可用空间大小
* @return INT32
* @remark 此函数不是线程安全的
*/
INT32 GetFreeSpare();

/**
* @brief
* 拷贝内存中的数据
* @param nReadOffSet : m_pNextRead的偏移量
* @param nLen : 需要读出的Buffer长度
* @remark 此函数不是线程安全的
*/
INT32 GetData(INT32 nReadOffSet,INT32 nLen, CHAR* szData);


private:
CHAR *m_pBuffer;
CHAR *m_pNextRead;
CHAR *m_pNextWrite;
CHAR *m_pEnd;
};

#endif

阅读全文

各类APP排行榜实现

需求背景

  1. 查看TopN的用户排名
  2. 查看自己的排名
  3. 用户积分变更后,排名及时更新

阅读全文

Timer 定时器技术分享

说点废话

不管是客户端Client还是服务器Server,不论你是从事游戏行业还是互联网行业,在技术上总会涉及到定时器。虽然有的框架系统已经帮你实现,并且提供完美API供你使用,但你真的了解定时器吗?我们不仅要知道如何使用正确的Timer,还得明白定时器的实现原理,要知其所以然。

阅读全文

linux fork函数详解

函数原型: pid_t fork(void)

    阅读全文

    全局唯一ID生成算法优化

    阅读全文

    linux 系统信号和中断常识

    什么是中断

    1. 中断基本概念

      中断是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。引起中断发生的事件被称为中断源。中断源向CPU发出的请求中断处理信号称为中断请求,而CPU收到中断请求后转到相应的事件处理程序称为中断响应。
      在有些情况下,尽管产生了中断源和发出了中断请求,但CPU内部的处理器状态、字PSW的中断允许位已被清除,从而不允许CPU响应中断。这种情况称为禁止中断。CPU禁止中断后只有等到PSW的中断允许位被重新设置后才能接收中断。禁止中断也称为关中断,PSW的中断允许位的设置也被称为开中断。开中断和关中断是为了保证某段程序执行的原子性。
      还有一个比较常用的概念是中断屏蔽。中断屏蔽是指在中断请求产生之后,系统有选择地封锁一部分中断而允许另一部分中断仍能得到响应。不过,有些中断请求是不能屏蔽甚至不能禁止的,也就是说,这些中断具有最高优先级,只要这些中断请求一旦提出,CPU必须立即响应。例如,电源掉电事件所引起的中断就是不可禁止和不可屏蔽的。

    阅读全文

    linux 安装指定版本MySql

    由于工作环境、生产环境,我们使用的操作系统为为CentOS6.9,所需mysql版本为5.7,目前CentOS6.x系统默认mysql版本为5.1,这个版本是实在是太旧了。

    彻底卸载系统已经安装的旧版本

      阅读全文