摘要: 1、简介 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相同的报文摘要的可能性是非常非常之小的。 在linux或Unix上,md5sum是用来计算和校验文件报文摘要的工具程序。一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行。2、命令格式md5sum [OPTION]... [FILE]...3、命令选项-b 或 --bi.. 阅读全文
posted @ 2013-08-31 00:16 Rabbit_Dale 阅读(1823) 评论(1) 推荐(2) 编辑
摘要: 转自:http://blog.chinaunix.net/uid-21411227-id-1826909.html1.前言:时常在cpp的代码之中看到这样的代码:#ifdef __cplusplusextern "C" {#endif//一段代码#ifdef __cplusplus}#endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入extern "C"{和}处理其中的代码。 要明白为何使用extern & 阅读全文
posted @ 2013-08-23 00:03 Rabbit_Dale 阅读(703) 评论(0) 推荐(0) 编辑
摘要: 转自:http://wdqfirst.blog.163.com/blog/static/1133474112012101221027321/vim使用—移动到文件开始和结束位置和 当前位置(gg,G)、快速定位到当前光标所在变量或函数的定义处(gd)、自动对齐C和C++程序(先gg再=再G)、自动补全变量名,函数名和字符串 ctrl+n或ctrl+p、复制(yy,nyy,ctrl+v配合y)、粘贴(p,P)、删除(dd,ndd,ctrl+v配合d,x)、撤销 (u,ctrl+r)、查找(/string配合n或N)、查看匹配的另外一半符号(%)。 1、将光标移动到文件的开始位置或结束位置:gg将 阅读全文
posted @ 2013-08-22 23:23 Rabbit_Dale 阅读(871) 评论(0) 推荐(0) 编辑
摘要: 1、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。 .. 阅读全文
posted @ 2013-08-21 00:57 Rabbit_Dale 阅读(172759) 评论(27) 推荐(81) 编辑
摘要: 1、前言 最近在学习linux内核方面的知识,经常会看到用户空间与内核空间及进程上下文与中断上下文。看着很熟悉,半天又说不出到底是怎么回事,有什么区别。看书过程经常被感觉欺骗,似懂非懂的感觉,很是不爽,今天好好结合书和网上的资料总结一下,加深理解。2、用户空间与内核空间 我们知道现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操心系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核,保证内核的安全,操心系统将虚拟空间划分为两部分,一部分为内核空间,... 阅读全文
posted @ 2013-08-19 22:57 Rabbit_Dale 阅读(46404) 评论(8) 推荐(22) 编辑
摘要: select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。关于这三种IO多路复用的用法,前面三篇总结写的很清楚,并用服务器回射echo程序进行了测试。连接如下所示:select:http://www.cnblogs.com/Anker/archi.. 阅读全文
posted @ 2013-08-17 20:16 Rabbit_Dale 阅读(380417) 评论(26) 推荐(102) 编辑
摘要: 1、基本知识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。2、epoll接口 epoll操作过程需要三个接口,分别如下:#include int epoll_create(int size);int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);int epoll_wai.. 阅读全文
posted @ 2013-08-17 01:41 Rabbit_Dale 阅读(154905) 评论(33) 推荐(32) 编辑
摘要: 1、基本知识 poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制。poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。2、poll函数 函数格式如下所示:# include int poll ( struct pollfd * fds, unsigned int nfds, int timeout);pollfd结构体定义如下:structpollf.. 阅读全文
posted @ 2013-08-15 22:16 Rabbit_Dale 阅读(79500) 评论(17) 推荐(8) 编辑
摘要: 1、基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。 (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 (3)如果一个TC 阅读全文
posted @ 2013-08-14 23:07 Rabbit_Dale 阅读(158721) 评论(29) 推荐(45) 编辑
摘要: 1、前言 在网络编程中,阻塞、非阻塞、同步、异步经常被提到。unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一遍时候,似懂非懂,没有深入理解。网上有详细的分析:http://blog.csdn.net/historyasamirror/article/details/5778378。我结合网上博客和书总结一下,加以区别,加深理解。2、数据流向 网络IO操作实际过程涉及到内核和调用这个IO操作的进程。以read为例,read的具体操作分为以下两个部分: (1)内核等待数据可读 (2)将内核读到的数据拷贝到进程详细过程如下图所示:3、网络I... 阅读全文
posted @ 2013-08-12 23:47 Rabbit_Dale 阅读(70111) 评论(18) 推荐(34) 编辑
摘要: 1、前言 最近在再看《程序员的自我修养》这本书,对程序的链接、装载与库有了更深入的认识。关于这本书的评价可以去豆瓣看看http://book.douban.com/subject/3652388/,强烈推荐给每一位程序员哈。今天看了第十章内存,主要讲的是栈和堆的管理。主要问题是:函数在栈中是如何布局的,如何通过缓冲区溢出来调用另外一个函数,即堆栈溢出攻击。2、基本概念 栈(stack):我第一次接触栈是从数据结构中,此时的栈是一种基本数据结构,栈的基本属性是先进后出(FILO)。 在计算机系统中,栈是一个具有先进后出属性的动态内存区域。程序可以将数据压入栈,也可以将数据从栈顶弹出。栈的增... 阅读全文
posted @ 2013-08-08 00:02 Rabbit_Dale 阅读(4584) 评论(8) 推荐(4) 编辑
摘要: 1、前言 目前从事于linux下程序开发,涉及到多个文件,多个目录,这时候编译文件的任务量比较大,需要写Makefile。关于Makefile的详细内容可以参考网上流传非常广泛的《跟我一起写Makefile》http://blog.csdn.net/haoel/article/details/2886/,作者是个大牛,非常佩服。2、简单测试 测试程序在同一个文件中,共有func.h、func.c、main.c三个文件,Makefile写法如下所示: 1 CC = gcc 2 CFLAGS = -g -Wall 3 4 main:main.o func.o 5 $(CC) mai... 阅读全文
posted @ 2013-08-06 23:48 Rabbit_Dale 阅读(79836) 评论(6) 推荐(5) 编辑
摘要: 在linux系统中创建一个文件提示:/application/report/shiwei # touch test.ctouch: cannot touch `test.c': Read-only file system总是提示Read-only file system,也就是说系统是只读的,什么也写不了。于是在网上到处找了一下,发现解决起来挺容易的。一条命令就可以了mount -o remount rw /参考:http://www.blogjava.net/hadeslee/archive/2009/08/13/291043.html 阅读全文
posted @ 2013-08-01 08:49 Rabbit_Dale 阅读(24528) 评论(1) 推荐(2) 编辑
摘要: 今天在执行一个protobuf程序时,提示error while loading shared libraries: libprotobuf.so.8: cannot open shared object file: No such file or directory错误。google了一下,是由于找不到lib这个文件。解决办法:一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如:tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file 阅读全文
posted @ 2013-07-24 09:08 Rabbit_Dale 阅读(104848) 评论(1) 推荐(9) 编辑
摘要: 1、protobuf是google公司提出的数据存储格式,详细介绍可以参考:https://code.google.com/p/protobuf/2、下载最新的protobuf,下载地址:https://code.google.com/p/protobuf/downloads/list3、下载protobuf2.5.o版本,protobuf-2.5.0.tar.gz解压并进行安装。解压:tar xvfprotobuf-2.5.0.tar.gz安装步骤:(1)./configure (2)make (3)make check (4)make install注意:安装成功后,将它的bin和lib目 阅读全文
posted @ 2013-07-24 00:57 Rabbit_Dale 阅读(18185) 评论(1) 推荐(0) 编辑
摘要: 1、Centos默认是从图形界面启动,需要较多的资源,为了节省资源可以从命令行启动。修改方法如下:/etc/inittab文件,把代码:id:5:initdefault:这一行,修改成代码:id:3:initdefault:保存后就reboot重新起动,2、一、CentOS 修改IP地址修改对应网卡的IP地址的配置文件# vi /etc/sysconfig/network-scripts/ifcfg-eth0修改以下内容DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为eth0BOOTPROTO=static #设置网卡获得ip地址的方式,可能的选项为sta 阅读全文
posted @ 2013-07-21 16:21 Rabbit_Dale 阅读(1978) 评论(0) 推荐(0) 编辑
摘要: gtest是google提供的一个非常强大的单元测试工具,下载地址:https://code.google.com/p/googletest我下载的是gtest-1.6.0.拷贝到Centos系统上面。参考:http://blog.csdn.net/butterflydog/article/details/7005045配置过程如下:1、解压gtest-1.6.02、查看文件内容,找到make文件,进行make,生成一个测试程序,包含gtest_main.a文件3、测试程序运行如下:4、新建一个文件夹,gtest_program,将gtest-1.6.0中的include文件拷过来。5、在gt 阅读全文
posted @ 2013-07-21 10:37 Rabbit_Dale 阅读(4444) 评论(2) 推荐(0) 编辑
摘要: 安装完centos后,写了一个驱动测试程序Hello。编译过程出现如下错误:make: *** /lib/modules/2.6.32-220.4.1.el6.i686/build: No such file or directory. Stop.make: *** [all] Error 2但是用ls查询了一下,该文件明明存在。上网搜集,终于明白了。需要安装很多kernel相关的编译软件。需要安装的软件如下:1:kernel-firmware 2:kernel 3:kernel-debug 4:kernel-headers 5:kernel-doc 6... 阅读全文
posted @ 2013-07-21 09:50 Rabbit_Dale 阅读(2136) 评论(0) 推荐(0) 编辑
摘要: Centos支持yum安装,安装软件一般格式为yum install .......,注意安装时要先成为root用户。按照这个思路,我想安装过程如下:安装gcc:yum install gcc安装g++: yum install g++实际操作过程发现,只能有gcc安装成功,而g++安装失败,提示g... 阅读全文
posted @ 2013-07-21 09:34 Rabbit_Dale 阅读(77420) 评论(3) 推荐(3) 编辑
摘要: 题目要求:编程实现计算器程序,完成实数的加、减、乘、除运算。注意运算符优先级别。表达式要求采用中缀形式,例如:2.3+7.2*7提示:表达式处理可参考“逆波兰表达式”范例。完整程序如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 #define MAXSIZE 100 6 #define SYMBOLSIZE 50 7 8 //表达式运算符结构体 9 typedef struct oper_symbol 10 { 11 char oper; //运算符 12 u. 阅读全文
posted @ 2013-05-13 00:02 Rabbit_Dale 阅读(3100) 评论(0) 推荐(0) 编辑