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 ...