摘要: UNIX环境高级编程一书中示例程序经常使用的错误处理函数。把这些函数保存到一个文件中,方便学习使用。#include #include #include "ourhdr.h"static void err_doit(int, const char*, va_list);char *pname = NULL;void err_ret(const char *fmt, ...){ va_list ap; va_start(ap, fmt); err_doit(1, fmt, ap); va_end(ap); return ;}void err_sys(const ch... 阅读全文
posted @ 2014-03-04 23:12 菜鸟天空 阅读(309) 评论(0) 推荐(0) 编辑
摘要: UNIX环境高级编程一书中示例程序都需要包含的头文件。把用到的头文件及一些宏定义都定义在这个文件中,方便学习者使用。/* Our own header, to be included before all standard system headers */#ifndef _APUE_H#define _APUE_H#if defined(SOLARIS)#define _XOPEN_SOURCE 500 /* Single UNIX Specification, Version 2 for Solaris 9 */#define CMSG_LEN(x) _CMSG_DATA_ALIGN(si 阅读全文
posted @ 2014-03-04 22:56 菜鸟天空 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 今天倒腾服务器,修改grub.conf文件后导致系统起不来了。后来就学习了一下如何从grub命令启动。grub引导其实挺简单的,只要简单地几步就可以了。一、指定/boot所在的分区(这一步可以取消)grub> root (hd0,0) #指定第一块硬盘的第一个分区。这个root (hd[0,n],y)是可以省略的,如果省略了,我们要在kerenl 命令中指定二、指定内核映像及根分区grub> kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/# kernel 指令,用来指定Linux的内核,及/所在的分区三、指定initrd 阅读全文
posted @ 2014-03-03 23:20 菜鸟天空 阅读(2786) 评论(0) 推荐(0) 编辑
摘要: 当编写驱动程序时,一般情况下不能使用C标准库的函数。Linux内核也提供了与标准库函数功能相同的一些函数,但二者还是稍有差别。类别函数名功能函数形成参数描述字符串转换simple_strtol把一个字符串转换为一个有符号长整数long simple_strtol (const char * cp, char ** endp, unsigned int base)cp指向字符串的开始,endp为指向要分析的字符串末尾处的位置,base为要用的基数。simple_strtoll把一个字符串转换为一个有符号长长整数long long simple_strtoll (const char * cp, 阅读全文
posted @ 2014-03-02 22:57 菜鸟天空 阅读(3683) 评论(0) 推荐(0) 编辑
摘要: Key-value存储简介具备高可靠性及可扩展性的海量数据存储对互联网公司来说是一个巨大的挑战,传统的数据库往往很难满足该需求,并且很多时候对于特定的系统绝大部分的检索都是基于主键的的查询,在这种情况下使用关系型数据库将使得效率低下,并且扩展也将成为未来很大的难题。在这样的情况下,使用Key-value存储将会是一个很好的选择。它被广泛应用于缓存,搜索引擎等等领域。 根据以上的描述,一个好的key-value存储需要满足哪些条件呢?l Availability可用性l Scalability可扩展性l Failover故障恢复l Performance高性能简单来说,就是数据不能丢失,服务不能 阅读全文
posted @ 2014-02-28 23:31 菜鸟天空 阅读(883) 评论(0) 推荐(0) 编辑
摘要: 如何处理海量数据在实际的工作环境下,许多人会遇到海量数据这个复杂而艰巨的问题,它的主要难点有以下几个方面:一、数据量过大,数据中什么情况都可能存在。如果说有10条数据,那么大不了每条去逐一检查,人为处理,如果有上百条数据,也可以考虑,如果数据上到千万级别,甚至过亿,那不是手工能解决的了,必须通过工具或者程序进行处理,尤其海量的数据中,什么情况都可能存在,例如,数据中某处格式出了问题,尤其在程序处理时,前面还能正常处理,突然到了某个地方问题出现了,程序终止了。二、软硬件要求高,系统资源占用率高。对海量的数据进行处理,除了好的方法,最重要的就是合理使用工具,合理分配系统资源。一般情况,如果处理的数 阅读全文
posted @ 2014-02-28 23:12 菜鸟天空 阅读(6468) 评论(0) 推荐(0) 编辑
摘要: 注:Linux下可以直接调用damon函数来实现daemon进程,没必要重新实现,理解其原理即可。在Linux中专门提供了一个函数来完成这个daemon化的过程,这个函数的原型如下int daemon ( int __nochdir, int __noclose) ; 如果__nochdir的值为0,则将切换工作目录为根目录;如果__noclose为0,则将标准输入,输出和标准错误都重定向到/dev /null。经过这个函数调用后的程序将运行在后台,成为一个daemon程序,而linux下大多的服务都是以此方式运行的。我们来看一个简单的例子。例如编写例子程序test.c#include #i. 阅读全文
posted @ 2014-02-14 23:41 菜鸟天空 阅读(3074) 评论(0) 推荐(0) 编辑
摘要: 原文出处:http://duyeit.blog.51cto.com/7260659/12522811.括号配对高亮:“在前括号左侧,后括号左侧” 双击鼠标左键,可以选定匹配括号和其中内容(,(),L{R},[]之间)2.让{ 和 } 不缩进:Options -> Document Options -> Auto Indenting -> Auto Indent Type 选 Simple还有:让{ 和 } 不缩进: options->document options->auto indent 去掉indent Open Brace和Indent Close Bra 阅读全文
posted @ 2014-02-14 22:11 菜鸟天空 阅读(387) 评论(0) 推荐(0) 编辑
摘要: 原文地址:块设备的处理及通用块层块设备的主要特点是,CPU和总线读写数据所化时间与磁盘所花时间与磁盘硬件的速度不匹配。块设备的平均访问时间很高。每个操作都需要几个毫秒才能完成,主要是因为磁盘控制器必须在磁盘表面将磁头移动到记录数据的确切位置。但是,当磁头到达正确的位置时,数据传送就可以稳定在每秒几十MB的速率。块设备的处理Linux块设备处理程序的组织是相当复杂的,块设备驱动程序上的每个操作都涉及很多内核组件。其中的一些如下图所示:例如,我们假设一个进程在某个磁盘文件上发出一个read()系统调用——write()系统调用本质上采用同样的方式。下面是内核对进程请求给予回应的一般步骤:1、rea 阅读全文
posted @ 2014-02-11 20:59 菜鸟天空 阅读(2849) 评论(0) 推荐(0) 编辑
摘要: 主题: linux内核模块的程序结构--模块加载函数(必须),模块卸载函数(必须),模块许可证声明(必须),模块参数(可选),模块导出符号(可选),模块作者的等信息声明(可选)一个linux内核模块主要由以下几个部分组成。1、模块加载函数"用module_init()来指定"(必须) 当通过insmod和modprobe命令加载内核模块时,模块的加载函数会自动被内核执行,完成本模块的相关初始化工作。linux模块加载函数一般以 __init表示声明。典型声明如下::static int __init initialization_function(void){ /*初始化代 阅读全文
posted @ 2014-01-15 22:33 菜鸟天空 阅读(535) 评论(0) 推荐(1) 编辑