分类 Linux 下的文章

谈谈writev的问题

POSIX提供了一个比write函数更加高级的writev,在很多场景下,它相对于write有一定的优势。

APUE一书将writev的介绍放在了Advanced I/O部分,个人拙见,它和write应该是属于同层次的IO,谈不上Advanced。

最近,我在重写HTTP解析器的时候用到了writev,发现它并不如想象中的方便,甚至相当坑,有必要记录一下,或许对大家有所帮助。

阅读剩余部分
dnsmasq 部署笔记

发现实验室留着5台主机没人用,反正闲着也是闲着,于是琢磨着部署个集群玩玩,貌似有很多东西并没有亲自体验过,如ceph,mesos,kubernetes等,之后应该会贴出相关的笔记。

无论部署什么服务,只要是分布式的,基本离不开域名解析,因为我基本记不住IP,所以DNS服务就很必要了。

本文为我在ubuntu上配置DNS服务的笔记,这里ubuntu的版本为16.04,DNS程序为DNSmasq。

阅读剩余部分
POSIX进程组笔记

题目起得有点大,这里加上POSIX只是为了说明本文描述并不是windows下的进程。

前几天遇到了一个问题,在terminal触发ctrl+c,也就是发送SIGINT信号后,程序的所有进程都收到了该信号,觉得有点奇怪,故收集并整理了相关资料。

本文为我的笔记,可能有不正确的点,望指正。

阅读剩余部分
多进程日志实现

在绝大多数情况下,日志模块对于一个程序而言是必不可少的,对于服务端程序的重要性尤甚。

因为几乎所有服务端程序都是作为守护进程而运行的,因此指望开发者从terminal获取程序的状态并不现实,这个时候,依靠日志记录关键信息就很重要了,当然日志的作用远不止记录信息,它还可以用于恢复,相信从事数据库开发的读者对这应该十分熟悉,但这不属于本文的范畴。

对于Java开发者而言,他们是很幸福的,因为有log4j,甚至还有slf4j,而对于C语言而言,并没有发现同等地位或者功能的日志库,更别提类似slf4j之类的日志库抽象层了。于是,我拿起键盘,再次造起了轮子。

本文谈及的实现是为了多进程程序而设计的,简单而有效是我们追求的目标,通常而言简单的程序性能不会太差,当然乱用锁的除外。

阅读剩余部分
Linux下的Time处理

HTTP协议中,有很多机制都和Time有关,这里先撇开缓存控制及过期机制,就拿Date开刀。

Date的格式大致如下:

Tue, 21 Jul 2015 21:19:41 GMT

好,现在问题就来了,如何得到这个字符串?先别急,本文将会对Linux下Time的格式化以及转换做一下解读。

阅读剩余部分