上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 26 下一页
摘要: 1. 打印错误信息 如果程序的执行必须要求某个宏被定义,在检查到宏没有被定义是可以使用#error,#warning打印错误(警告)信息,如: #ifndef __unix__#error "This section will only work on UNIX systems"#endif 只有__unix__宏被定义,程序才能被正常编译。 2. 方便调试 __FILE, __LINE, __... 阅读全文
posted @ 2013-04-19 14:10 ydzhang 阅读(227) 评论(0) 推荐(0)
摘要: 1. read系统调用 测试程序:客户端向服务器端(tcp)发送一个”hello”字符串,服务器端读取并echo到客户端。 服务器端主要代码: char buf[4096]; int r = tcp_readn(sock, buf, 4096); int w = tcp_writen(sock, buf, r); 客户端主要代码: char buf[4096]; int w... 阅读全文
posted @ 2013-04-19 14:10 ydzhang 阅读(341) 评论(0) 推荐(0)
摘要: Tair是由淘宝开发的一个key/value存储系统。 参考:http://rdc.taobao.com/blog/cs/?p=302 在数据分配方面,Tair使用了对照表,对照表由于数据路由功能,由配置服务器(configserver负责维护),configserver周期性的初始化各个数据节点的信息,并通过Heartbeat来管理数据节点的状态。对照表通常包含多个slot(应远大于数据... 阅读全文
posted @ 2013-04-19 14:09 ydzhang 阅读(614) 评论(0) 推荐(0)
摘要: Bitcask来自于riak,是一个日志(log-structured)存储系统。用在riak的分布式数据库的底层key/value的存储。 Bitcask的一些基本特征: 1. key/value以日志的形式按顺序存储,只能追加(append-only)写入key/value,每次写操作都是顺序写入。当某个key所对应的value发生变化时,新的key/value被追加到文件末尾。 2... 阅读全文
posted @ 2013-04-19 14:09 ydzhang 阅读(1357) 评论(0) 推荐(0)
摘要: 1. 与日志相关字段的初始化 <super.c> static int parse_options (char *options, struct super_block *sb, unsigned long *inum, unsigned long *journal_devnum, ext3_fsblk_t *n_blocks_count, int is_remount) { … ca... 阅读全文
posted @ 2013-04-19 14:09 ydzhang 阅读(746) 评论(0) 推荐(0)
摘要: 内核线程是直接由内核本身启动的进程。内核线程实际上是将内核函数委托给独立的进程,与系统中其他进程“并行”执行(实际上,也并行于内核自身的执行),内核线程经常被称为内核“守护进程”。它们主要用于执行下列任务: l 周期性地将修改的内存页与页来源块设备同步。 l 如果内存页很少使用,则写入交换区。 l 管理延时动作 l 实现文件系统的事务日志。 内核线程主要有两种类型: 1. 线程启动... 阅读全文
posted @ 2013-04-19 14:09 ydzhang 阅读(202) 评论(0) 推荐(0)
摘要: linux系统中每个进程由一个进程id标识,在内核中对应一个task_struct结构的进程描述符,系统中所有进程的task_struct通过链表链接在一起,在内核中,经常需要通过进程id来获取进程描述符,最简单的方法可以通过遍历task_struct链表并对比id的值来获取,但这样效率太低,尤其当系统中运行很多个进程的时候。 linux内核通过PID散列表来解决这一问题,能快速的通过进程I... 阅读全文
posted @ 2013-04-19 14:09 ydzhang 阅读(659) 评论(0) 推荐(0)
摘要: 内核中很多地方都需要跟踪记录C语言中结构的实例。尽管这些对象的用法大不相同,但各个子系统的某些操作都非常类似,如引用计数,内核为了减少代码复制,采用了一般性的方法来管理内核对象。所引入的框架并不只是为了减少代码复制,同时也为内核不同部分管理的对象提供了一致的视图。 一般性的内核对象机制可用于执行下列对象操作: 1. 引用计数; 2. 管理对象链表; 3. 集合加锁; 4. 将对象属性... 阅读全文
posted @ 2013-04-19 14:09 ydzhang 阅读(840) 评论(0) 推荐(0)
摘要: 很多应用需要客户首先进行注册,然后使用用户名、密码进行验证,之前在为一个分布式系统添加认证模块的时候,遇到一个问题,这里进行简要的分析。认证的两种主要形式:1. 单机登录认证:如windows、linux系统用户登录,这种应用的程序代码通常是不公开的,用户要正常的使用系统,必须越过这一障碍。2. 网络登录认证:如QQ、飞信等聊天软件的用户登录,这种应用的代码可以是开源的,因为即使即使代码开源,hacker去掉了客户认证的代码,重新编译运行,服务器发现记录客户端的登录状态为未登录,客户端还是不能继续工作。项目中遇到的问题:客户端通过挂载后,像使用本地文件系统一样使用远程文件系统。登录认证在挂载的 阅读全文
posted @ 2013-04-19 14:09 ydzhang 阅读(257) 评论(0) 推荐(0)
摘要: 对于很多服务来说,在同一个服务器上只能运行一个实例,那么通过什么方法来保证程序同一时刻只有一个实例运行呢?通过编写shell脚本来管理程序的启动、停止是个不错的方法。在启动时,shell脚本会创建进程标识文件(存储正在运行实例的pid)以表明已经有实例在运行,如果文件已存在,则说明已有实例在运行,不需要做任何事;在退出时,shell脚本会删除进程标识文件,表明没有实例运行。shell脚本管理方法在应用程序之上再包了一层,那么能不能直接在程序开始运行时自己判断是否有实例在运行呢,答案是肯定的。原理其实差不多,还是要借助公用资源---文件,当然不仅仅是文件而已,还需要文件锁的支持。大致思路是这样的 阅读全文
posted @ 2013-04-19 14:09 ydzhang 阅读(257) 评论(0) 推荐(0)
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 26 下一页