摘要: epoll的限制不在于FD_MAXSIZE,而是每个进程所可以打开的最大IO文件描述符。使用root权限执行修改系统设置#设置进程允许打开最大文件描述符 echo "ulimit -n 40960" >> /etc/profile . /etc/profile#设置TCP协议栈未完成连接队列长度echo "40960" > /proc/sys/net/ipv4/tcp_max_syn_backlog#设置TCP协议栈三次握手连接完成队列长度echo "10240" > /proc/sys/net/core/so 阅读全文
posted @ 2013-05-16 11:10 gmark 阅读(492) 评论(0) 推荐(0)
摘要: 将字符串Hash成整型存储经常用到BKDRHash算法uint64_t BKDRHash(const char *pszKey){ uint64_t seed = 131; register uint64_t uCode=0; while(pszKey[0]) { uCode = uCode *seed + (unsigned char)pszKey[0]; pszKey++; } return uCode;}选择了64位的key,减少冲突的概率。 阅读全文
posted @ 2012-12-21 09:14 gmark 阅读(727) 评论(0) 推荐(0)
摘要: 设置开机启动程序(用smbd举例)注:不同Linux发行版目录可能不同,本文以sles10举例1.su切换root身份,查看启动参数:vim /etc/inittab可以看到第一行为id:3:initdefault:(表示使用level 3 级别启动)所以我们执行的第一个开机脚本是: /etc/init.d/rc 3该脚本表示可以取到/etc/rc.d/rc3.d 这个目录来执行目录下的程序2.cd /etc/init.d/rc 3 切换到该目录一般为K*开头和S*开头的软链接如K16ssh2、S06ssh2、等等K/S表示服务以stop/start方式起停,中间的数字表示起停顺序3.可以在/ 阅读全文
posted @ 2012-12-20 15:30 gmark 阅读(318) 评论(0) 推荐(0)
摘要: 在C++中用到map时,如果KEY是自定义的struct,那么需要自己定义比较函数。因为只有基本类型有默认的比较方法。定义的方法有两种,一是在作为key的struct中,重载操作符less(<),二是自定义仿函数作为map的比较函数,个人比较喜欢第二种方法。//自定义map的keytypedef struct UrlKey{ uint64_t dwBussID; uint64_t dwVersion; uint64_t dwHashUrl;}UrlKey;//自定义map的valuetypedef struct UrlValue{ string strUrl;}UrlValue;//ma 阅读全文
posted @ 2012-12-18 11:08 gmark 阅读(19111) 评论(1) 推荐(1)
摘要: 用QQ举例子1.在环境变量中的系统环境变量选择新建2.变量名填写要与启动的exe名称一样,可以重命名exe文件以达到方便启动的目的,变量值填写为exe文件的目录地址。(QQ的启动文件名叫腾讯QQ,可以重命名为QQ,然后在变量名填写QQ,变量值填写文件夹路径如D:\QQ)3.编辑系统变量Path,在变量值中增加 %变量名%(刚刚创建变量的变量名%QQ%,注意用;与前面隔开)。4.Win+R,输入变量名(qq || QQ 大小写随意)赶紧试试吧。另外推荐一个Rainmeter 工具 阅读全文
posted @ 2012-10-11 20:16 gmark 阅读(337) 评论(0) 推荐(0)
摘要: 开发Python推荐Komodo,搭配的MySQL管理软件就用SQLyog。开发C和C++比较推荐SourceInsight,还可以连远程开发机。至于管理Linux开发机,就用WinSCP和SecureCRT的搭配。如果想在Windows环境下的cmd也可以模拟使用Linux的命令,安装一个Cygwin就可以了。 阅读全文
posted @ 2012-10-11 16:42 gmark 阅读(305) 评论(0) 推荐(0)
摘要: 详情参考ctypes用法,暂时没有时间研究http://docs.python.org/library/ctypes.html?highlight=ctypes#ctypes 阅读全文
posted @ 2012-09-27 22:31 gmark 阅读(341) 评论(0) 推荐(0)
摘要: Python与C、C++交互的时候,如果进行网络消息的收发,需要讲数据打包解包为字节流。这时候就会用到Struct模块中的pack、unpack函数打包: PKG = '' # '!' means network byte #PkgHead PKG += pack('!i', 0x54434d) #int PKG += pack('!H', 4) #ushort PKG += pack('!i', calcsize('!iiHiiiiIic')) #le... 阅读全文
posted @ 2012-09-27 22:26 gmark 阅读(1288) 评论(0) 推荐(0)
摘要: 多进程的方法就是传统的fork语句,如果返回为0,则子进程创建成功,在进程中运行#在子进程fork之前,调用本方法防止僵尸进程的出现#SIGCHLD为子进程,交给系统0号进程 init去回收signal.signal(signal.SIGCHLD,signal.SIG_IGN)#如果fork的返回值为0,则说明是子进程if(0 == os.fork()): #创建一个新的守护进程 daemon = MyDaemon(pidfile) if daemon: daemon.start()守护进程和多进程结合起来,可以做到主进程根据需要去创建子守护进程执行任务,并检测... 阅读全文
posted @ 2012-09-27 22:07 gmark 阅读(1294) 评论(0) 推荐(1)
摘要: # -*- coding: utf-8 -*-import sys, os, time, atexitfrom signal import SIGTERMclass Daemon: def __init__(self, pidfile, stderr='/data/deamon_err.log', stdout='/data/deamon_out.log', stdin='/dev/null'): self.stdin = stdin self.stdout = stdout self.stderr = stderr self.pi... 阅读全文
posted @ 2012-09-27 21:55 gmark 阅读(5643) 评论(1) 推荐(1)