自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(70)
  • 收藏
  • 关注

原创 多线程的信号处理

一个进程包含多个线程,当这个进程收到一个信号时。。。。进程之间用信号量还是比较好的,线程间用条件变量可以用信号量来实现,settimer到每个timer间隔的最大公约数(Timer的最小间隔),在信号处理函数里面对每个active的Timer的信号量Release(1),要使用Timer的线程自己创建个结构,加到全局变量timer queue,然后A

2013-08-29 09:25:28 214

转载 fork()两次来避免产生僵尸进程

为何要fork()两次来避免产生僵尸进程?      当我们只fork()一次后,存在父进程和子进程。这时有两种方法来避免产生僵尸进程:父进程调用waitpid()等函数来接收子进程退出状态。父进程先结束,子进程则自动托管到Init进程(pid = 1)。      目前先考虑子进程先于父进程结束的情况:     若父进程未处理子进程退出状态,在父进程退出前

2013-08-27 13:39:37 577

转载 ncx_mempool 轻量级内存池

April 14, 2013 Leave a commentgithub地址: https://github.com/dcshi/ncx_mempool.其中ncx_slab.c.orz详细地进行了源码分析,所以文章不会对代码实现细节详细讨论。 开发c、c++程序的时候,malloc、new等内存分配很函数很多时候会被使用到。但对于长期运行的后台服务来

2013-08-19 22:06:25 1185

转载 提高 Linux 上 socket 性能(转载)

http://www.ibm.com/developerworks/cn/linux/l-hisock.html在开发 socket 应用程序时,首要任务通常是确保可靠性并满足一些特定的需求。利用本文中给出的 4 个提示,您就可以从头开始为实现最佳性能来设计并开发 socket 程序。本文内容包括对于 Sockets API 的使用、两个可以提高性能的 socket 选

2013-08-19 08:53:13 613

转载 shell快捷键

shell快捷键Ctrl + a 可以快速切换到命令行开始处 Ctrl + e 切换到命令行末尾 Ctrl + r 在历史命令中查找 Ctrl + u 删除光标所在位置之前的所有字符 Ctrl + k 删除光标所在位置之后的所有字符 ctrl + w 删除光标之前的一个单词 Ctrl + d 结束当前输入、退出shell ctrl + s 可用来停留在当前屏 c

2013-08-08 11:48:07 530

原创 open vswitch的datapath阅读笔记

ovs_flow_cmd_new_or_set是datapath收到nlmsg后调用的。是之前注册给doit的一个回调函数。在generic netlink收到数据时触发,运行在进程上下文。 doit传入两个参数,skb为触发此回调函数的socket buffer。第二个参数是一个genl_info结构体。static int ovs_flow_cmd_new_or_set(struct

2013-07-25 22:49:43 1964

转载 OpenvSwitch 代码分析(零)

虚拟交换机是云计算和网络虚拟化的基础。作为目前唯一一个事实上的标准,OpenvSwitch几乎占据了所有的优势。唯一一个开源的虚拟交换机软件实现(注意,竟然是产品级实现),集成到了大部分的云计算和虚拟化产品中,被主流厂商所追捧,支持SDN的相关协议……好了,更多的介绍还是自己看官方网站吧。为什么要做软件交换机?并不是说软件交换机灵活、廉价,更重要的原因,云计算的发展太快了,SDN的发展太快

2013-07-23 11:26:20 4948

转载 OpenvSwitch 代码分析(一)

本小节简要分析datapath模块。datapath模块实现了最底层交换机机制的基本过程,该模块跟sdn其实并没有太大关系。接收网包-->查表-->转发;如果表中没有,则通过upcall扔给ovsd。datapath模块的代码主要包括如下几个关键子模块:主文件datapath.h/c,vport的实现vport-(generic/gre/capwap/netdev/internal

2013-07-23 11:26:05 4662 1

转载 OpenvSwitch 代码分析(二)

本小节分析vswitchd模块,该模块作为管理底层datapath的重要模块,实现了openflow的主要逻辑,以及对交换机的具体管理和除简单转发外的其他逻辑。可见,该模块十分重要,主要生成ovs-vswitchd文件,其中主文件为vswitchd/ovs-vswitchd.c。整体分析Vswitchd模块主要包括bridge、ofproto等子模块。作为主要逻辑实现模块,

2013-07-23 11:25:25 6081 1

转载 OpenvSwitch 代码分析(三)

本小节简要分析datapath收到网包,到跟ovsd进行交互的过程。动态过程datapath收到网包在dp_init中通过调用dp_register_genl()注册了对于dp,vport,flow,packet四种类型事件的netlink family和ops。当内核中的openvswitch.ko收到一个添加网桥的指令时候,即接收到OVS_DATAP

2013-07-23 11:24:37 3712

转载 OpenvSwitch 代码分析(四)

本小节主要分析ovsd和datapath之间通过netlink进行通信的机制。datapath运行在内核态,ovsd运行在用户态,两者通过netlink通信。datapath使用generic netlink在dp_init()函数(datapath.c)中,调用dp_register_genl()完成对四种类型的family以及相应操作的注册,包括datapath、v

2013-07-23 11:23:51 3652

原创 ubuntu 12.04 用户密码输入正确,但是无法登陆图形界面。

安装了ubuntu 12.04。之后关机重启。再开的时候发现无法登陆图形界面了。密码是没错的。查找了网上的资料以后,发现时/home/yyy/.Xauthority文件的所属组不对。(yyy是我的用户名)。改为sudo chown yyy:yyy /home/yyy/.Xauthority随机可以登陆图形界面啦。

2013-07-22 14:56:25 1011

转载 跨平台时基于数据结构的网络通信

网络通信通常分为基于数据结构的和基于流的。HTTP协议就是后者的一个例子。    有时为了提高程序的处理速度和数据处理的方便,会使用基于数据结构的通信(不需要对流进行解析)。但是,当需要在多平台间进行通信时,基于数据结构的通信,往往要十分注意以下几个方面:[1] 字节序[2] 变量长度[3] 内存对齐    在常见的系统架构中(Linux X86,Windows),非单字节长度

2013-07-11 21:57:33 640

转载 GDB 查看死锁

死锁:一种情形,此时执行程序中两个或多个线程发生永久堵塞(等待),每个线程都在等待被  其他线程占用并堵塞了的资源。例如,如果线程A锁住了记录1并等待记录2,而线程B锁住了记录2并等待记录1,这样两个线程就发生了死锁现象。gdb调试死锁的方法:gdb attach pidthread apply all bt找到_lll_lo

2013-06-28 12:07:15 8090

转载 变长结构体的实现

#include #include #include struct aa{     int a;    int b;};struct bb{     struct aa test[0];};int main(void){    struct bb *p=(struct bb*)malloc(sizeof(struct bb)+sizeof(s

2013-06-17 22:42:11 806

原创 makefile练习

主目录下的makefileSUBDIRS := lib src objCC := gccBIN := mainCFLAGS = -cLOCAL_SRC := $(wildcard *.c)LOCAL_OBJ := $(patsubst %.c,%.o,$(LOCAL_SRC)) #$(BIN) : $(LOCAL_OBJ) #$(CC) $(CFLAGS) $(BIN) $(L

2013-06-17 08:34:48 908

转载 makefile 编译静态库和动态库

一。静态库创建静态库  仍使用刚才的hello.c和test.c。  第一步,生成目标文件。  gcc -c hello.c  第二步,把目标文件归档。  ar r libhello.a hello.o  file libhello.a  下面一行命令就是教你如何在程序中链接静态库的:  gcc test.c -lhello -L. -static -o hel

2013-06-15 08:12:57 500

转载 Lunix下编译静态库文件

.o后缀文件:编译生成的中间代码文件;.a后缀文件:静态库文件,编译的时候会合到可执行程序中,文件比较大;.so后缀文件:动态库文件,只是一个指向,不会合到可执行程序中,当要调用函数库的时候才使用; 用一个简单的例子阐述下在lunix环境下生成静态库文件的过程:一.   源码文件:so_test.h:void test_a();void test_b();voi

2013-06-14 22:22:49 478

原创 autotools使用

《例解 autoconf 和 automake 生成 Makefile 文件》http://www.ibm.com/developerworks/cn/linux/l-makefile/(1)工程文件夹结构       project       |       |___  src |       |                |_   cc_main.c

2013-06-08 16:07:33 422

转载 Linux设备模型之tty驱动架构分析

一:前言Tty这个名称源于电传打字节的简称。在linux表示各种终端。终端通常都跟硬件相对应。比如对应于输入设备键盘鼠标。输出设备显示器的控制终端和串口终端.也有对应于不存在设备的pty驱动。在如此众多的终端模型之中,linux是怎么将它们统一建模的呢?这就是我们今天要讨论的问题.二:tty驱动概貌Tty架构如下所示:如上图所示,用户空间主要是通过设备文件同tty_core交互

2013-06-03 20:02:50 414

转载 ARM平台上蓝牙协议栈Bluez的移植使用和配置

Bluez作为当前最成熟的开源蓝牙协议栈,在Linux的各大发行版中已经得到了广泛的应用。在桌面环境下,使用Bluez应该已经没有太大的问题,本文的主要目的是介绍在嵌入式平台上,搭建和配置Bluez的各个Profile运行所需做的工作,讨论可能遇到的问题,介绍一些工具的使用和工作原理。因为本人的能力和测试时间有限,可能下文中有些理解、分析不一定准确,欢迎联系指正。1 相关说明1.1

2013-06-03 15:35:58 1478

转载 植BlueZ到ARM开发板

前 一段的时间,都在移植BlueZ的库文件和工具基到ARM的开发板,现在的整个一套设备已经基本完成。内核是开发板自己带的 2.6.13,从2.4.6后的版本里就已经在内核里带有了BlueZ支持,我要做的就是,进入Networking子项,build-in 上Bluetooth subsystem support。下面的L2CAP protocol support和SCO links support

2013-06-03 15:34:03 708

原创 linux交叉编译ARM内核问题合集

(1)然后就出现如图所示的错误,  CHK     include/generated/uapi/linux/version.h  CHK     include/generated/utsrelease.hmake[1]: “include/generated/mach-types.h”是最新的。  CC      kernel/bounds.scc1: error: unrecognized

2013-05-25 09:29:35 3155 1

原创 由于时钟同步问题,出现 warning: Clock skew detected. Your build may be incomplete.这样的警告

解决办法:find . -type f | xargs -n 5 touchmake cleanmake

2013-05-24 20:17:42 523

转载 使用openssl api编程

1.安装openssl库:  sudo sudo apt-get install libssl-dev2.服务器端实现代码#include #include #include #include #include #include #include #include #include #include #include

2013-05-14 16:49:43 462

转载 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值

1、阻塞模式与非阻塞模式下recv的返回值各代表什么意思?有没有区别?(就我目前了解阻塞与非阻塞recv返回值没有区分,都是 0接收到数据大小,特别:返回值 2、阻塞模式与非阻塞模式下write的返回值各代表什么意思?有没有区别?阻塞与非阻塞write返回值没有区分,都是 0发送数据大小,特别:返回值 3、阻塞模式下read返回值 非

2013-05-13 20:31:13 403

转载 Valgrind 使用简单说明

Valgrind能做什么?  •内存使用检测,包括:    –内存泄漏    –非法内存访问    –未初始化变量使用    –重复释放内存  •多线程竞争    –检测死锁    -检测竞争Valgrind还能做什么?  •性能分析    –Cachegrind+ cg_annotate    它模拟 CPU中的一级缓存I1,D

2013-05-12 18:38:32 444

转载 映射samba的共享目录为win盘符

映射samba的共享目录为win盘符Posted on 2008/12/16 by yuzifu右击“我的电脑”或“网上邻居”,选择“映射网络驱动器”,选择盘符,输入samba共享目录,勾选”登录时重新连接“,单击”使用其他用户名进行连接“并输入samba帐号。上面方法在win2k系统是正常的,但在XP以上系统就会出现当时正常连接但重新登录后不能连接到的问题,到

2013-05-11 14:24:12 1003

转载 判断大小端

下面这段代码可以用来测试一下你的编译器是大端模式还是小端模式:short int x;char x0,x1;x=0x1122;x0=((char*)&x)[0]; //低地址单元x1=((char*)&x)[1]; //高地址单元若x0=0x11,则是大端; 若x0=0x22,则是小端......上面的程序还可以看出,数据寻址时,用的是低位字节的地址。Endia

2013-04-26 16:14:12 469

原创 cc

#define DEFUN(funcname, cmdname, cmdstr, helpstr)\       int funcname(struct cmd_element *, struct vty*, int, char** );\       struct cmd_element cmdname = {\              cmdstr,\

2013-04-25 10:12:39 126

转载 ZZZ

#define _CTC_LTAIL(p_list)  ((p_list)->head.p_prev)#define _CTC_LHEAD(p_list)  ((p_list)->head.p_NEXT)#define CTC_LIST_POINTER_LOOP(p_node, p_list) \ if(plist)\for((p_node = ctc_list_point

2013-04-25 08:39:49 98

转载 Ubuntu 下VirtualBox Bridge完美上网设置

VirtualBox下的GUESS系统一直都是以NAT方式上网,这对于局域网的分机想访问虚拟机下的系统一直都不方便。通过网上流行的Bridge方式是可以解决局域网问题,但也有同样的问题出现:1、每次重启后都要再运行一次,即使你做成SHELL,但也是要运行2、VirtualBox下的GUESS系统是连入了网络,而且也可以通过DHCP或手动IP上网,但问题出现在HOST那里,变成了主机自己不能

2013-04-21 23:39:20 596

转载 ubuntu下的vnc客户端

使用时,直接输入vncviewer 即可,之后会弹出一个小框,输入ip,直接回车就行了或者直接使用vinagre也行

2013-04-21 23:33:17 419

转载 LWIP之TCP层接收相关

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://bluefish.blog.51cto.com/214870/1584162009-05-12  LWIP之TCP层接收相关        既然定了这么个标题,当然是要从socket的recv来讲了。这里主要涉及到lwip_recvfrom这个函数。它的大致

2013-04-16 19:23:58 873

转载 函数指针参数的传递问题

http://www.newsmth.net/pc/pccon.php?id=10002501&nid=337392  程序1:  void  myMalloc(char  *s)  //我想在函数中分配内存,再返回  {       s=(char  *)  malloc(100);  }   void  main()  {       char  *p=

2013-04-05 21:02:25 478

转载 gdb+core

调试Linux程序的时候,出现Segmentation Fault是最郁闷的事情了,程序代码量很大的时候,可能花很多时间都找不到出错原因。       这里介绍一种对你调试Segmentation Fault很有帮助的方法,可能能迅速帮助你找到出错的代码行。       这种方法需要用到Linux提供的core dump机制:当程序中出现内存操作错误时,会发生崩溃并产生核心文件(core文

2013-04-03 22:01:52 529

转载 "undefined reference to" 问题解决方法

最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:(.text+0x13): undefined reference to `func'     关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。1.  链接时缺失了相关目标文件(.o)

2013-04-01 17:31:37 528

转载 常见gcc编译警告整理(开始)

1、warning: no newline at end of file在文件最后一行加上回车键解释:在《Rationale for the C99 standard》一文中,有C99的相关信息:A backslash immediately before a newline has long been used to continue string literals, as well

2013-03-30 14:16:30 508

转载 基于LWIP的ICMP路由重定向改进

LWIP(LightWeightInternetProtoco1)是瑞士计算机科学院(SwedishInstituteofComputerScience)AdamDunkels等人开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。LWIP的含义是LightWeight(轻型)IP协议。LWIP可以移植到操作系统上,也可以在无操作系统的情况下独立运行。LWIPTCP/IP实现的重点是在保持TC

2013-03-27 12:01:44 748

转载 Intel E100 网卡驱动实例分析

Intel E100 网卡驱动实例分析本来是做zero-copy的,顺便把分析记录写下来,供大家参考,如果有错误清大家多包涵。只挑重要的来说,一些细节的地方我也不大懂,要看芯片手册才行,我们作软件的就别看那么细了,最重要是把主要流程弄清除。 系统结构定义以下定义的结构,要保证长度是32bit的整数,也就是4bytes对齐,在自己添加成员的时候尤其小心。struct

2013-03-26 14:50:51 506

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除