摘要:
1、前言 最近工作比较忙,加班较多,每天晚上回到家10点多了。我不知道自己还能坚持多久,既然选择了就要做到最好。写博客的少了。总觉得少了点什么,需要继续学习。今天继续上个开篇写,介绍单生产者单消费者模型的队列。根据写入队列的内容是定长还是变长,分为单生产者单消费者定长队列和单生产者单消费者变长... 阅读全文
摘要:
1、前言 队列在计算机中非常重要的一种数据结构,尤其在操作系统中。队列典型的特征是先进先出(FIFO),符合流水线业务流程。在进程间通信、网络通信之间经常采用队列做缓存,缓解数据处理压力。结合自己在工作中遇到的队列问题,总结一下对不同场景下的队列实现。根据操作队列的场景分为:单生产者——单消费... 阅读全文
摘要:
RCU原理: RCU(Read-Copy Update),顾名思义就是读-拷贝修改,它是基于其原理命名的。对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据的... 阅读全文
摘要:
1、前言 当前计算机都是多核的,linux2.6提供了进程绑定cpu功能,将进程指定到某个core上执行,方便管理进程。linux提供了sysconf系统调用可以获取系统的cpu个数和可用的cpu个数。2、sysconf 函数 man一下sysconf,解释这个函数用来获取系统执行的配置信息。例... 阅读全文
摘要:
1、前言 为了使程序方便扩展,具备通用性,可以采用插件形式。采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形式加载进来,这就是所谓的插件。linux提供了加载和处理动态链接库的系统调用,非常方便。本文先从使用上进行总结,涉及到基本的操作方法,关于动态链接库的本质及如何加载进来,... 阅读全文
摘要:
1、前言 今天在看代码中遇到一个结构中包含char data[0],第一次见到时感觉很奇怪,数组的长度怎么可以为零呢?于是上网搜索一下这样的用法的目的,发现在linux内核中,结构体中经常用到data[0]。这样设计的目的是让数组长度是可变的,根据需要进行分配。方便操作,节省空间。2、data... 阅读全文
摘要:
【前置条件】vmware搭建好虚拟机web服务器 ,但是本机就是无法访问的解决办法。linux虚拟机的网络选择Bridged 桥接到本机网卡。具体情况如下 :1.本机能ping通虚拟机2.虚拟机也能ping通本机3.虚拟机能访问自己的web4.本机无法访问虚拟机的web【问题原因】这个情况大多是防火墙屏蔽了80端口导致的,需要对防火墙进行配置。【解决方法】1、在terminate中敲入命令 setup,进入Firewall configuration2、tab键选择Customize3、上下箭头选择最后一项www(http)这个是web服务器开通的80端口,勾选上表示trusted 可信 。这 阅读全文
摘要:
将近一个月没有写博客了,不是没有内容可以写,而是工作繁忙,每天加班晚上10点半,回来就11点多。做的工作比较繁杂,最近熟悉了linux字符驱动、DNS协议、wireshark抓包,shell脚本。收获还是蛮多,需要继续深入,写几篇总结性的博客。接下来计划写4篇博客,总结一下。1、linux字符驱动2、DNS协议3、wireshark抓捕工具4、踩内存的原理 阅读全文
摘要:
在centos下安装好了mysql,用root帐号连上mysql,然后创建一个数据库,提示下图错误: 提示:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'。网上找了一个比较流行的方法(见... 阅读全文
摘要:
1、前言 最近学习搭建wordpress,需要用到apahce和mysql。我是下载源代码进行安装的,安装在/url/local目录下,每次开机都需要手动启动,有点麻烦。如是想设置开机启动,从网上查了一下,如何设置,总结一下,方便以后使用。2、设置方法 有两种方法,一种是修改配置文件,一种是通过添加启动项。方法一:根据系统启动的初始化过程,修改配置文件 Centos中的运行模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中的最后一个,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登录之前执行的命令。关于rc.d的介绍可以参考:http://blog.c... 阅读全文
摘要:
1、前言 今天学习搭建wordpress,apache服务器安装在虚拟机的Centos上。配置好以后,发现在虚拟机上可以访问,但在windows主机上不能访问。于是百度、google一下,终于解决问题。2、问题场景 当时配置虚拟机与windows主机之间是用NAT共享网络,Cenots不能ping通windows。3、解决办法 (1)将虚拟机与主机之间的网络连接设置为桥接方式。 (2)自定义Linux主机ip,自定义之后需要重新启动network服务,重启network的命令为,service network restart。 (3)windows下pingLinux主机,Linux下... 阅读全文
摘要:
1、前言 XML树状层次结构鲜明,非常适合作为配置文件。PHP中可以使用DOM XML来操作XML。本文总结一下PHP使用DOM XML创建、添加节点、查询XML文件。2、使用DOM XML XML中节点分为元素和文本,DOMDocument类型是文档类型,提供了操作元素和文本的成员函数和属性。DOMDocument类如下:DOMDocument extends DOMNode {/* Properties */readonly public string $actualEncoding ;readonly public DOMConfiguration $config ;readonly.. 阅读全文
摘要:
1、前言 今天在公司看一同事写的代码,代码中用到了struct,初始化一个struct用的是乱序格式,如下代码所示:typedef struct _data_t { int a; int b;}data_t;data_t data = { .a = 10, .b = 20,}; 通常初始化一个结构体的方式是按序初始化,形如:data_t data={10,20}。感觉很好奇,如是上网百度一下,发现linux下struct初始化可以采用顺序和乱序两种方式,而乱序又有两种不同的形式。本文总结一下struct两种初始化方式的优缺点,并给出完整的测试程序。2、顺序初始化 教科... 阅读全文
摘要:
1、前言 xml广泛应用于网络数据交换,配置文件、Web服务等等。近段时间项目中做一些配置文件,原来是用ini,现在改用xml。xml相对来说可视性更为直观,很容易看出数据之间的层次关系。关于xml的详细介绍可以参考http://baike.baidu.com/view/159832.htm?fromId=63。本文重点介绍解析xml的libxml2库的安装及使用,举例说明创建和解析xml的过程。2、libxml2的安装 关于libxml2的介绍请参考官方网址http://xmlsoft.org/,下载最新的libxml2库http://xmlsoft.org/downloads.html.. 阅读全文
摘要:
1、前言 在实际开发过程中,各个模块之间会涉及到一些通用的功能,比如读写文件,查找、排序。为了减少代码的冗余,提高代码的质量,可以将这些通用的部分提取出来,做出公共的模块库。通过动态链接库可以实现多个模块之间共享公共的函数。之前看《程序员的自我修养》中讲到程序的链接和装入过程,这些玩意都是底层的,对于理解程序的编译过程有好处。http://www.ibm.com/developerworks/cn/linux/l-dynlink/博文介绍了程序的链接和装入过程。本文重点在于应用,如何编写和使用动态链接库,后续使用动态链接库实现一个插件程序。2、动态链接库生产 动态链接库与普通的程序相比而言.. 阅读全文
摘要:
1、前言 时间对操作系统来说非常重要,从内核级到应用层,时间的表达方式及精度各部相同。linux内核里面用一个名为jiffes的常量来计算时间戳。应用层有time、getdaytime等函数。今天需要在应用程序获取系统的启动时间,百度了一下,通过sysinfo中的uptime可以计算出系统的启动时间。2、sysinfo结构 sysinfo结构保持了系统启动后的信息,主要包括启动到现在的时间,可用内存空间、共享内存空间、进程的数目等。man sysinfo得到结果如下所示: 1 struct sysinfo { 2 long uptime; ... 阅读全文
摘要:
1、前言 OUI是指Organizationally unique identifier (组织唯一标识符),签发给各类组织的唯一标识符。MAC地址共有6个字节48位组成,前3个字节体现了OUI,其表明了NIC的制造组织。通常情况下,该标识符是唯一的。详细介绍参考:http://standards.ieee.org/develop/regauth/oui/public.html。oui.txt文件中记录世界所有网卡的制造厂商,共有18859个。文件中记录mac的前三位与公司的对应关系。本文目地是对oui.txt文件进行解析,生产一个信息的文件,在程序中可以根据制定的mac地址,快速查找其对应. 阅读全文
摘要:
1、前言 今天需要处理一个oui.txt文件,需要从中抽丝man和orginaziton信息,导出到另外一个文件中。可以cat和grep命令进行操作。之前对cat命令了解一下,知道cat可以查看文件内容和创建文件。今天在此详细的总结一下,以便日后使用。2、cat命令功能cat命令有三个功能,(1)查看文件内容(2)创建新文件(包括将多个文件合并为一个文件)(3)向已有文件中添加内容3、命令格式cat [OPTION]... [FILE]...选项为:-A, --show-all 等价于 -vET-b, --number-nonblank 对非空输出行编号-e 等价于 -vE-E, --sho. 阅读全文
摘要:
1、前言 最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核的kfifo改过来的。缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度。例如一个进程A产生数据发给另外一个进程B,进程B需要对进程A传的数据进行处理并写入文件,如果B没有处理完,则A要延迟发送。为了保证进程A减少等待时间,可以在A和B之间采用一个缓冲区,A每次将数据存放在缓冲区中,B每次冲缓冲区中取。这是典型的生产者和消费者模型,缓冲区中数据满足FIFO特性,因此可以采用队列进行实现。Linux内核的kfifo正好是一个环形队列,可以用来当作环形缓冲区。生产者与消费者使用缓冲区如下. 阅读全文
摘要:
1、前言 最近写代码需用到链表结构,正好公共库有关于链表的。第一眼看时,觉得有点新鲜,和我之前见到的链表结构不一样,只有前驱和后继指针,而没有数据域。后来看代码注释发现该代码来自linux内核,在linux源代码下include/Lish.h下。这个链表具备通用性,使用非常方便。只需要在结构定义一个链表结构就可以使用。2、链表介绍 链表是非常基本的数据结构,根据链个数分为单链表、双链表,根据是否循环分为单向链表和循环链表。通常定义定义链表结构如下:typedef struct node{ ElemType data; //数据域 struct node *nex... 阅读全文