摘要: 1、前言 今天在看代码时,遇到offsetof和container_of两个宏,觉得很有意思,功能很强大。offsetof是用来判断结构体中成员的偏移位置,container_of宏用来根据成员的地址来获取结构体的地址。两个宏设计的很巧妙,值得学习。linux内核中有着两个宏的定义,并在链表结构中得到应用。不得不提一下linux内核中的链表,设计的如此之妙,只需要两个指针就搞定了。后续认真研究一下这个链表结构。2、offsetof宏 使用offsetof宏需要包含stddef.h头文件,实例可以参考:http://www.cplusplus.com/reference/cstddef/of.. 阅读全文
posted @ 2013-12-12 23:53 Rabbit_Dale 阅读(21504) 评论(7) 推荐(8) 编辑
摘要: 1、前言 在linux下开发程序,为了追求高性能,经常需要测试程序的性能,包括cpu、内存、io、网络等等使用情况。liunx下提供了众多命令方便查看各种资源的使用情况。经常用的有ps、top、free、mpstat、iostat、vmstat、netstat。2、ps、top、free命令 ps用于查看系统中进程的情况,top能够实时显示系统中各个进程的资源占用状况,free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。3、mpstat命令 用于获取CPU相关统计信息,命令执行结果如下图所示:%user 表示处理用户进程所使用 C... 阅读全文
posted @ 2013-12-07 01:26 Rabbit_Dale 阅读(7268) 评论(0) 推荐(1) 编辑
摘要: 1、前言 最近看到一份代码,看到一个函数前面用__attribute__((destructor))修饰,当时感觉有点怪怪的,搜了整个程序,也没发现哪个地方调用这个函数。于是从字面意思猜想,该函数会在程序结束后自动调用,与C++中的析构函数类似。第一次接触GNU下的attribute,总结一下。2、__attribute__介绍 __attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__前后都有两个下划线,并且后面会紧跟一对原括弧,括弧里面是相应的.. 阅读全文
posted @ 2013-12-07 00:50 Rabbit_Dale 阅读(5549) 评论(2) 推荐(0) 编辑
摘要: 1、前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量。由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针。感觉很奇怪,为何要将一个指针这样做呢?如是果断上网查查,发现我的感觉是错误的,所以,任何事情不能凭感觉,要弄清楚来龙去脉。先总结一下intptr_t类型,然后介绍指针与intptr_t类型的转换,最后给出测试程序。2、intptr_t类型 我接触最早的处理器是32位,目前64位处理器发展迅速。数据类型特别是int相关的类型在不同位数机器的平台下长度不同。C99标准并不规定具体数据类型的长度大小。位数charshortin.. 阅读全文
posted @ 2013-11-22 23:52 Rabbit_Dale 阅读(37942) 评论(6) 推荐(4) 编辑
摘要: 1、前言 今天看代码时候,遇到一些宏,之前没有见过,感觉挺新鲜。如是上网google一下,顺便总结一下,方便以后学习和运用。C语言程序中广泛的使用宏定义,采用关键字define进行定义,宏只是一种简单的字符串替换,根据是否带参数分为无参和带参。宏的简单应用很容易掌握,今天主要总结一下宏的特殊符号及惯用法。 (1)宏中包含特殊符号:#、##. (2)宏定义用do{ }while(0)2、特殊符号#、##(1)# Whenyouputa#beforeanargumentinapreprocessor macro,thepreprocessorturnsthatargumentintoac... 阅读全文
posted @ 2013-11-12 01:04 Rabbit_Dale 阅读(61898) 评论(5) 推荐(2) 编辑
摘要: 1、前言 项目中用到protobuf-c进行数据序列化,好处在于后期程序扩展性非常好,只需要改动proto的定义就可以保持兼容,非常的灵活方便。关于protobuf-c的详细介绍可以参考google官方文档。https://code.google.com/p/protobuf-c/。在此简单的介绍一 阅读全文
posted @ 2013-11-10 12:41 Rabbit_Dale 阅读(47388) 评论(4) 推荐(1) 编辑
摘要: 1、前言 测试一个程序的执行时间,时间包括用户CPU时间、系统CPU时间、时钟时间。之前获取之前时间都是在程序的main函数用time函数实现,这个只能粗略的计算程序的执行时间,不能准确的获取其他时间。在看《APUE》时,书中有关程序时间测试程序,非常正规,提供这三个时间。如是,上网搜了一下,进行总结一下。2、获取方法 有两种方法可以获取,第一种是用time命令,time 进程。第二种是通过在程序中进行记录,首先利用sysconf函数获取时钟滴答数,再用times获取tms结构。查看times函数,man 2 tms,得到tms结构定义和times函数声明如下:struct tms {... 阅读全文
posted @ 2013-11-10 00:33 Rabbit_Dale 阅读(1942) 评论(0) 推荐(0) 编辑
摘要: 1、前言 工作中涉及到数据处理,后台需要用到PHP处理数据,之前没有接触过PHP,借此机会了解了一下PHP,PHP很方便,很灵活,编码很舒服,很喜欢用PHP处理后台数据。今天总结一下php文件操作,主要涉及到文件打开、读、写和关闭。2、PHP文件操作API文件创建/打开fopen:(创建并)打开一个文件或 URL 地址。文件写入fwrite:向文件写入内容,可安全用于二进制文件 。file_put_contents:向文件写入内容,等同依次调用 fopen,fwrite 以及 fclose 函数。文件读取fread:读取文件,可安全用于二进制文件。fgets:从文件中读取 一行 数据,... 阅读全文
posted @ 2013-10-25 01:37 Rabbit_Dale 阅读(1252) 评论(1) 推荐(0) 编辑
摘要: 1、前言 在嵌入式设备中,硬盘空间非常有限,在涉及到经常写日志的进程时候,需要考虑日志的大小和删除,不然很快就硬盘写满,导致日志程序崩溃。为了捕获硬盘写满的异常场景,我们需要在写日志过程中判断硬盘空间的使用情况,根据硬盘的使用情况,就可以判断是否写满了。如果将要写满了,就给出警告。这样就可以避免程序崩溃。首先看一下linux获取硬盘和目录大小的命令,最后总结一下statfs结构和函数。2、df命令 Linux下可以用df命令获取硬盘的使用情况,通过man可以获取df命令的详细情况。df命令经常用的参数为: a:显示全部的档案系统和各分割区的磁盘使用情形 i:显示i -nodes的使用量... 阅读全文
posted @ 2013-10-21 23:43 Rabbit_Dale 阅读(72462) 评论(1) 推荐(3) 编辑
摘要: 今天下午捣腾安装mysql和apache。从网上下载mysql5.6.10,http://ishare.iask.sina.com.cn/f/36050990.html,解压后发现没有configure文件,百度一下才知道,不是用configure而是用cmake。参照网址:http://hi.baidu.com/mucunzhishu/item/aa78b3eaa9f518ffe0a5d487http://zhouxuguang.blog.51cto.com/1053090/236292/http://blog.sina.com.cn/s/blog_5d37bf9f0101iuse.ht.. 阅读全文
posted @ 2013-10-20 19:51 Rabbit_Dale 阅读(329) 评论(0) 推荐(0) 编辑
摘要: tar命令用来处理压缩,压缩和解压。在linux上经常遇到tar命令,总结如下:tar-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。-z:有gzip 属性的-j:有bz2 属性的-Z:有compress 属性的-v:显示所有过程-O:将文件解开到标准输出下面的参数-f 是必须的-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。# tar -cf all.tar *.jpg这条命令是将所有.jp 阅读全文
posted @ 2013-10-08 07:38 Rabbit_Dale 阅读(3305) 评论(0) 推荐(0) 编辑
摘要: 今天从Apache官网上http://httpd.apache.org/下载httpd web服务器,由于我的虚拟机上之前安装过,我先yum remove httpd进行卸载,然后重新安装。我采用的是源码安装,先进行./configure --prefix=/usr/local/apahce --enable-so ,提示以下错误:configure: error: APR not found. Please read the documentation.解决办法wgethttp://apache.freelamp.com/apr/apr-1.4.2.tar.gz 下载apr./confi.. 阅读全文
posted @ 2013-10-07 15:42 Rabbit_Dale 阅读(18084) 评论(0) 推荐(1) 编辑
摘要: 之前安装Centos时候,没有怎么注意,将自己的名字设置为hostname,总感觉好别扭,很不习惯,如是就想把hostname改一下,用到hostname命令。首先用hostname命令查看当前的主机名,核对一下当前的主机名。修改hostname过程:(1)修改/etc/hosts文件,将包含当前的hostname改为新的hostname。我将shiwei改为rabbit。补充一下: /etc这个目录用来存放所有的系统管理所需要的配置文件和子目录。进入后可以看到很多配置文件 /etc/hosts文件的作用相当于DNS,提供IP地址hostname的对应。(2)修改/etc/syscon... 阅读全文
posted @ 2013-10-07 10:35 Rabbit_Dale 阅读(15534) 评论(1) 推荐(1) 编辑
摘要: 今天安装Apache httpd web服务器时,从官方网站上http://www.apache.org/dyn/closer.cgi下载httpd,然后在centos下解压,安装过程分为三部分: (1)./configure (2)make (3)make install (需要root权限)默认安装在/usr/sbin/下,执行apachectl start时候,提示如下错误:httpd: apr_sockaddr_info_get() failed for shiweihttpd: Could not reliably determine the server's ful... 阅读全文
posted @ 2013-10-07 10:20 Rabbit_Dale 阅读(39621) 评论(0) 推荐(2) 编辑
摘要: 1、前言 protobuf是Google提供的结构持久化工具,类型XML,但要比XML更加灵活,效率要高。protobuf当初支持C++、JAVA和Python,后来有了支持C语言的Protobuf-c。关于prorobuf可以参考:https://code.google.com/p/protobuf/和https://code.google.com/p/protobuf-c/。2、安装protobuf-c问题 今天从google官方网站上面下载了protobuf-c,解压进行安装,在执行./configure时候出现错误:错误提示:protobuf headers are require.. 阅读全文
posted @ 2013-10-04 19:33 Rabbit_Dale 阅读(4435) 评论(0) 推荐(0) 编辑
摘要: 1、前言 我们经常涉及到数字与字符串之间的转换,例如将32位无符号整数的ip地址转换为点分十进制的ip地址字符串,或者反过来。从给定的字符串中提取相关内容,例如给定一个地址:http://www.bokeyuan.cn:2345,我们要从地址中提出协议,主机地址和端口号。之前对字符串和数字之间的关系不是很熟悉,工作中经常涉及到这个,如是好好总结一下。C语言提供了一些列的格式化输入输出函数,最基本的是面向控制台标准输出和输入的printf和scanf,其实还有面向字符串的sprint和sscanf,面向文件的流的fprintf和fscanf。今天着重总结一下sprintf和sscanf系列... 阅读全文
posted @ 2013-10-04 00:40 Rabbit_Dale 阅读(49933) 评论(2) 推荐(10) 编辑
摘要: 1、前言 工作中涉及到文件系统,有时候需要判断文件和目录是否存在。我结合APUE第四章文件和目录,总结一下如何正确判断文件和目录是否存在,方便以后查询。2、stat系列函数 stat函数用来返回与文件有关的结构信息。stat系列函数有三种情况,分别对应文件名称、文件描述符和符号链接文件。stat结构描述了文件的属性,主要包括文件的类型、文件大小等等。详细stat结构如下所示: 1 struct stat { 2 mode_t st_mode; // file type & mode(permissions) 3 ino_t st_ino; /... 阅读全文
posted @ 2013-10-02 21:15 Rabbit_Dale 阅读(99540) 评论(3) 推荐(4) 编辑
摘要: 系统:windows8软件:Source Insight 3.5安装后打开总是提示如下图错误,没法使用。卸载重新安装好多次,还是不行,百度一下,终于找到方法,记录一下,方便以后查找。解决方法:设置运行权限,source insight 需要用管理员权限执行。设置方法:右击Insight3.exe,选择属性-->兼容性-->特权等级-->以管理员身份运行此程序打勾参考:http://blog.csdn.net/liubangbo/article/details/6627008 阅读全文
posted @ 2013-10-01 10:05 Rabbit_Dale 阅读(3355) 评论(0) 推荐(0) 编辑
摘要: 1、命令简介 ps命令用来查看系统上的进程信息。要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多 的资源等等。总之大部分信息都是可以通过执行该命令得到的。2、命令格式 ps [options] [--help]3、命令参数常用的参数选项为:-A 列出所有的进程-w 显示加宽可以显示较多的资讯-au 显示较详细的资讯-aux 显示所有包含其他使用者的行程其他的选项如下所示:常用参数:-N 忽略选择。-d 显示所.. 阅读全文
posted @ 2013-09-01 01:14 Rabbit_Dale 阅读(978) 评论(2) 推荐(1) 编辑
摘要: 1、简介 file命令是用来检测并显示文件类型(determine file type)。通过file指令,我们得以辨识该文件的类型,例如可以知道动态连接库是32位还是64位。2、命令格式 file[-bciknsvzL] [-fnamefile] [-mmagicfiles]fileAm]... file-C[-mmagicfile ]3、命令参数 -b 列出辨识结果时,不显示文件名称。 -c 详细显示指令执行过程,便于排错或分析程序执行的情形。 -f 指定名称文件,其内容有一个或多个文件名称,让file依序辨识这些文件,格式为每列一个文件名称。 -L 直接显示符号连接... 阅读全文
posted @ 2013-08-31 00:48 Rabbit_Dale 阅读(775) 评论(0) 推荐(0) 编辑