unix 标准输入输出缓存

四个月前碰到一个问题。 我相信,系统为了提高程序IO效率,会先将输出流缓存起来,不会立即写到磁盘。 但感觉这个理论,不能说服我在帖子里提到了两个疑问: tail延时5-10秒,才读取到日志。(延时太长令人费解!) 部分log并不是按逻辑顺序输出。(无法接受!) 比如 PS: LOG("1"); LOGERR("2"); // 在日志文件里,2竟先打印 2 1 最近从《UNIX环境高级编程》第五章-标准IO/库读到了相关内容,认为可以解答以上2个疑问。 以下大部分内容摘自抄原文。 标准I/O提供了以下3种类型的缓冲: 全缓冲。在这种情况下,填满标准I/O缓存后才进行实际I/O操作。对于驻...
Click to read more ...

zlog运行时增加format和rule规则

zlog是一个日志库,我对它的配置化操作很感兴趣 我希望zlog能在运行时增加format和rule规则,这样做有个好处(见issues ): 相同的日志输出格式可以在运行时,统一定义。 增加这个功能尝试修改了一下。 zlog.h添加增删[format]和[rule]规则的接口(删规则还未实现) int zlog_add_format(const char *ctx); void zlog_del_format(const char *name); int zlog_add_rule(const char *ctx); void zlog_del_rule(const char *name); test目录里增加了相应的测试用例test_add_rule.c // Fil...
Click to read more ...

修复toluapp在lua5.3的整数错误

长期以来,lua number即用来表示整数类型,也用来表示浮点类型。 最近将旧工程lua从5.1.4升级到5.3.4后。发现以下问题,lua_pushnumber压入整数,该值在lua里打印却是带有“点号”浮动数 // c/c++ File int val = 1; lua_pushnumber(L, val); lua_setglobal(L, "value"); -- Lua File print(value) --5.1.4打印"1" --5.3.4打印"1.0" 出现这个问题,原因是Lua 5.3之后,官方已明确区分integer和number类型 Changes since Lua 5.2 Here are the main changes introduced...
Click to read more ...

进程开关实例及shell技巧

后端程序免不了经常启动、关闭和检查进程。本文简单实现这3个操作,引出一些shell技巧。 只是自己的一些经验,难免会有偏颇,不过抛砖引玉罢。 进程列表 进程列表是key-value结构,通过进程名称(key),获取其对应配置信息(value)。不像其它高级编程语言,shell原生没有key-value容器。另外列表不会很长,选择遍历列表的做法不会对性能影响太大 # 配置列表 proc_list=\ ( loginSrv="-cfg loginSrv.cfg -ip 192.168.0.2 -port 123" dbSrv="-cfg dbSrc.cfg -ip 192.168.0.3 -port 456" ) # 通过进程名称,获取列表配置信息 function get_p...
Click to read more ...

斯蒂芬·金《写作那会事》

前部分是作者的自传,后部分介绍写作经验心得体会。全书没有严肃的教条,通俗易懂。 作者书中多次推荐另一本写作技巧书。小威廉.斯特伦克和e.b怀特合著的《风格的要素》 在开始写作前,找一个能让你进入安静工作的地方, 以下我阅读后,总结的写作技巧 描述有时侯不必细致,留给读者去想象。 积累词汇。为了准确表达内容。 学好语法。错误的语法导致含义模糊,但是正确语法的语句也不见得有实际意义。 适当使用被动语法。被动语法可以避免与主语产生行动竞争,但可以为语句增加权威性。如:“会议将于七点整被举行”修改成“会议定在七点整” 适当使用副词。读者通过现实的...
Click to read more ...