自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 资源 (2)
  • 收藏
  • 关注

原创 技术文章

http://blog.chinaunix.net/uid-20513742-id-1658230.html

2015-08-03 10:25:27 440

原创 a

31位掩码对应的是X是多少?256-2^1(32-31=1)=256-2=25430位掩码对应的是X是多少?256-2^2(32-30=2)=256-4=25229位掩码对应的是X是多少?256-2^3(32-29=3)=256-8=24828位掩码对应的是X是多少?256-2^4(32-28=4)=256-16=24027位掩码对应的是X是多少?

2015-02-28 11:14:24 377

原创 总结

444

2014-09-29 13:33:45 408

原创 strace调试

2012-03-23 wcdj在GNU/Linux环境下,当程序出现“疑难杂症”的时候,如何快速定位问题呢?本文介绍strace/ltrace的一些使用方法,内容主要来自个人的读书笔记(可见参考文献)。strace/ltrace 是一类不错的工具,在工作中经常会用到,其主要可以用于:(1) 了解一个程序的工作原理(可以了解Linux下很多常用的命令实现的原理);(2

2014-06-06 16:41:04 2071

原创 Linux系统编程

wait()和waitpid()函数说明   wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或者该进程接收到了一个指定的信号为止。如果该父进程没有子进程或者它的子进程已经结束,则wait()函数就会立即返回。   waitpid()的作用和wait()一样,但它并不一定要等待第一个终止的子进程(它可以指定需要等待终止的子进程),它还有若干选项,如可

2014-06-06 15:10:57 1995

原创 记忆

1、内存分配图代码段:存放二进制代码数据段:文字常量区(字符串常量)+静态区(全局变量和static变量)堆区:程序员分配释放栈区:编译器分配和释放2、static作用a.c中定义的全局变量a和函数msg能在main.c中使用,未加static前缀的全局变量和函数都具有全局可见性,如果加了static,就会对其它源文件隐藏 存储在静态数据区的变量会在程序刚开始运行时

2014-03-11 14:23:18 472

原创 linux 系统编程整理

1.fork()父进程, fork函数返回了子程序的进程号,而对于子程序,fork函数则返回零#include errno.h> 2#include stdio.h> 3#include stdlib.h> 4 5char command[256]; 6void main() 7{ 8   int rtn; /*子进程的返回数值*/ 9   while(

2013-11-21 09:58:39 699

原创 面试准备

改错:试题1:void test1(){ char string[10]; char* str1 = "0123456789"; strcpy( string, str1 );}  试题2:void test2(){ char string[10], str1[10]; int i; for(i=0

2013-11-19 10:27:33 740

原创 链表3

一个简单结点的结构体表示为:    struct note    {       int  data;              /*数据成员可以是多个不同类型的数据*/       struct  note  *next;      /*指针变量成员只能是-个*/    }; 一个简单的单向链表的图示 1.链表是结构

2013-10-31 13:52:51 414

原创 指针偏移

首先看一段程序:[cpp] view plaincopy#include     int main()  {      int a[5] = {1, 2, 3, 4, 5};      int* p = (int*)(&a + 1);        printf("%d, %d /n", *(a + 1), *(p

2013-10-29 15:31:54 999

原创 链表2

先看代码:  文件名:main.c1 #include  2 #include  3 /******************************************************************* 4  5   熟悉链表(List)的结构: 6   1、头指针、头节点、首节点和尾节点的概念 7   2、创建一个链表的算法 8   3、遍历一个链表的算法

2013-10-28 16:24:36 558

原创 链表

链表概述链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址。因此,head指向第一个元素:第一个元素又指向第二个元素;……,直到最后一个元素,该元素不再指向其它元素,它称为

2013-10-28 15:46:55 818

原创 面试题3

问:下面代码会输出什么?#include  int main(void) {     int a = 10, b = 20, c = 30;     printf("\n %d..%d..%d \n", a+b+c, (b = b*2), (c = c*2));      return 0; } 答:输出结果是:110..40..60 这是因为C语言里函数的参数默认是从右往

2013-10-25 17:46:32 645

原创 netfilter hook 点详解

数据报从进入系统,进行IP校验以后,首先经过第一个HOOK函数NF_IP_PRE_ROUTING(目的地址转换在此点进行)进行处理;然后就进入路由代码,其决定该数据报是需要转发还是发给本机的;若该数据报是发被本机的,则该数据经过HOOK函数NF_IP_LOCAL_IN处理以后然后传递给上层协议;若该数据报应该被转发则它被NF_IP_FORWARD处理;经过转发的数据报经过最后一个HOOK函数NF_

2013-10-24 16:12:28 880

原创 深入Linux网络核心堆栈--netfilter详解

目录 1 - 简介  1.1 - 本文涉及的内容  1.2 - 本文不涉及的内容2 - 各种Netfilter hook及其用法  2.1 - Linux内核对数据包的处理  2.2 - Netfilter对IPv4的hook3 - 注册和注销Netfilter hook4 - Netfilter 基本的数据报过滤技术[1]  4.1 - 深入hook函数

2013-10-24 15:00:11 1073 1

原创 内存管理(X86-32位系统)

linux内存的管理主要分为两部分,地址管理和存储设备管理。下面针对这两部分介绍一下我对内存管理的理解。 待续...硬件地址的基本概念DRAM域地址:是DRAM控制器所能访问的地址空间集合。PCI总线域地址:是PCI设备所能直接访问的地址空间集合。存储器域地址:是CPU所能访问的地址空间集合。结合下图对上面概念进行解释: 

2013-10-24 13:11:53 1536

原创 Linux中Netfilter的原理

2.4.x的内核相对于2.2.x在IP协议栈部分有比较大的改动, Netfilter-iptables更是其一大特色,由于它功能强大,并且与内核完美结合,因此迅速成为Linux平台下进行网络应用扩展的主要利器,这些扩展不仅包括防火墙的实现--这只是Netfilter-iptables的基本功能--还包括各种报文处理工作(如报文加密、报文分类统计等),甚至还可以借助Netfilter-iptable

2013-10-24 10:54:17 1143

原创 Linux--Linux互斥锁、条件变量和信号量

Linux--Linux互斥锁、条件变量和信号量 进行多线程编程,最应该注意的就是那些共享的数据,因为无法知道哪个线程会在哪个时候对它进行操作,也无法得知哪个线程会先运行,哪个线程会后运行。所以,要对这些资源进行合理的分配和正确的使用。在Linux下,提供了互斥锁、条件变量和信号量来对共享资源进行保护。一、互斥锁互斥锁,是一种信号量,常用来防止两个进程或线程在同一时刻访问相同的

2013-10-23 11:25:39 1014

原创 条件变量

互斥量和读写锁解决了多线程访问共享变量产生的竞争问题,那么条件变量的作用何在呢。条件变量的作用在于他给多个线程提供了一个汇合的场所。什么意思呢?举个最简单的例子,比如运动会赛跑中,所有选手都会等到发令枪响后才会跑,吧选手比作其他的子线程。发令员比作主线程。 那么就是说,所有的子线程现在都在等待主线程给予一个可以运行的信号(发令枪响)。这就是这些子线程的汇合点。如果主线程没给信号

2013-10-23 11:12:54 568

原创 进程间通信-信号量详解及编程实例

前面一篇文章线程同步之信号量同步 讲的是线程之间的信号量,这篇讲的更加具有通用性,能够实现进程之间的同步。信号量概述信号量定义:它是一个特殊变量,只允许对它进行等待和发送信号这两种操作。P(信号量变量sv):等待。如果sv大于0,减小sv。如果sv为0,挂起这个进程的执行。V(信号量变量sv):发送信号。如果有进程被挂起等待sv,使其恢复执行。如果没有进行被

2013-10-23 09:36:16 756

原创 线程同步之信号量同步

inux中两种基本的同步方法是信号量和互斥量。这两种方法很相似,而且它们可以相互通过对方来实现。信号量概述下面介绍用信号量进行同步。信号量概念由荷兰科学家Dijkstra首先提出。信号量是一个特殊类型的变量,它可以被增加或者减少。但对其的关键访问被保证是原子操作,即使在一个多线程程序中也是如此。信号量有两种类型:(

2013-10-22 17:54:58 732

原创 多线程例子

互斥锁      正如上面所说的,如果两个线程同时对一块内存进行读写或者对向同一个文件写数据,那么结果是难以设想的。正因为如此,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。 例如int *a  int *b  分别指向两块内存,上面的值分别初始化为(200, 100) 线程

2013-10-22 16:43:41 530

原创 linux多线程编程

什么是线程?      线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。二、什么时候使用多线程?     当多个任务可以并行执行时,可以为每个任务启动一个线程。

2013-10-22 15:39:53 511

原创 strlen和sizeof的区别

strlen和sizeof的区别1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。 该类型保证能容纳实现所建立的最大对象的字节大小。2.sizeof是运算符,strlen是函数。3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。 sizeof还可以用函数

2013-10-22 15:26:58 1100

原创 static 作用

(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容char a = 'A'; // global variablevoid msg() {    printf("Hello\

2013-10-22 15:25:32 513

原创 unsigned int

unsigned int整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据,比如16位系统中一个int能存储的数据的范

2013-10-22 14:54:17 1511

原创 有名管道例子

测试系统:RedHat Linux 9.0 源文件:[csharp] view plaincopy/*   * 管道通信:有名管道   * 无名管道只能用于具有亲缘关系的进程之间,而有名管道可以在互不相关的两个进程间   * 实现彼此通信。要注意,FIFO严格按照先进先出的规则,对管道及FIFO的读总是从开始 

2013-10-22 14:42:32 1214

原创 管道例子

无名管道例子#include    #include    #include    #define MAX_LINE 80   #define PIPE_STDIN 0   #define PIPE_STDOUT 1   /*    myPipe[ 1 ]向管道写入数据;myPipe[ 0 ]从管道读取数据。   */  int main(  )       {           con

2013-10-22 14:17:52 772

原创 共享内存例子

共享内存是LUNIX 系统中最底层的通信机制,也是最快速的通信机制。共享内存通过两个或多个进程共享同一块内存区域来实现进程间的通信。通常是由一个进程创建一块共享内存区域,然后多个进程可以对其进行访问,一个进程将要传出的数据存放到共享内存中,另一个或多个进程则直接从共享内存中读取数据。因此这种通信方式是最高效的进程间通信方式。但实际的问题在于,当两个或多个进程使用共享内存进行通信时,同步问题

2013-10-22 13:48:04 856

原创 void指针

void在英文中作为名词的解释为“空虚;空间;空隙”;而在C语言中,void为“无类型”,相应的void *为“无类型指针”。void似乎只有“注释”和限制程序的作用,当然,这里的“注释”不是为我们人提供注释,而是为编译器提供一种所谓的注释。void的作用:       1.对函数返回的限定,这种情况我们比较常见。       2.对函数参数的限定,这种情况也是比较常见的。

2013-10-22 13:25:35 651

原创 有名管道例子

有名管道管道没有名字,它的通信只限定于亲缘关系间的通信,有名管道实现了无亲缘关系间的通信,原理是fifo提供了一个路径名与之关联,让fifo的文件存于系统中,只要知道该文件路径,就可以进行访问。fifo指代(fist in, fist out),即按照先进先出的工作。fifo 创建#include #include int mkfifo(const char

2013-10-22 11:35:43 1511

原创 管道2

管道应用的一个重大限制是它没有名字,因此,只能用于具有亲缘关系的进程间通信,在有名管道(named pipe或FIFO)提出后,该限制得到了克服。 FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过FIFO相互通信(能够访问该路径的进程以及FIFO的创建进程之间)。

2013-10-22 10:26:35 464

原创 管道

管道及有名管道李建功 (lijiangong2012@163.com)信息安全工程师2012 年 12 月 11 日在本系列序中作者概述了 linux 进程间通信的几种主要手段。其中管道和有名管道是最早的进程间通信机制之一,管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因 此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。

2013-10-22 10:23:46 561

原创 linux 多进程编程

Linux下的多进程编程初步1 引言    对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值。fork函数是Unix系统最杰出的成就之一,它是七十年代UNIX早期的开发者经过长期在理论和实践上的艰苦探索后取得的成果,一方面,它使操作系统在进程管理上付出了最小的代价,另一方面,又为程序员提供了一个简洁明了的多进程方法。与DOS和早期

2013-10-22 09:34:01 591

原创 面试题2

6、请写出下列代码的输出内容 #include main() { int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0; } 答:10,12,120

2013-10-21 15:15:53 593

原创 linux网络协议栈4

路由表    在内核中存在路由表fib_table_hash和路由缓存表rt_hash_table。路由缓存表主要是为了加速路由的查找,每次路由查询都会先查找路由缓存,再查找路由表。这和cache是一个道理,缓存存储最近使用过的路由项,容量小,查找快速;路由表存储所有路由项,容量大,查找慢。首先,应该先了解路由表的意义,下面是route命令查看到的路由表:Desti

2013-10-17 15:22:10 809

原创 linux网络协议栈3

在netif_receive_skb()函数中,可以看出处理的是像ARP、IP这些链路层以上的协议,那么,链路层报头是在哪里去掉的呢?答案是网卡驱动中,在调用netif_receive_skb()前,skb->protocol = eth_type_trans(skb, bp->dev);该函数对处理后skb>data跳过以太网报头,由mac_header指示以太网报头:

2013-10-17 15:11:32 556

原创 linux 网络协议栈2

纠结了好多天,终于弄懂了B440X的处理。上篇讲到通过中断,最终网卡调用了b44_rx()来接收报文 对这个函数中的一些参数,可以这样理解:bp->rx_cons – 处理器处理到的缓冲区号bp->rx_pending – 分配的缓冲区个数bp->rx_prod – 当前缓冲区的最后一个缓冲号 这里要参数B440X的手册了解下寄存器的作用:#defi

2013-10-17 15:03:35 626

原创 linux网络协议栈1

内核版本:Linux-2.6.34网卡驱动:B4401  什么是NAPINAPI是linux一套最新的处理网口数据的API,linux 2.5引入的,所以很多驱动并不支持这种操作方式。简单来说,NAPI是综合中断方式与轮询方式的技术。数据量很低与很高时,NAPI可以发挥中断方式与轮询方式的优点,性能较好。如果数据量不稳定,且说高不高说低不低,则NAPI会在两种方式切换上消耗不少

2013-10-17 14:57:53 672

原创 面试题1

找错题  试题1:void test1(){ char string[10]; char* str1 = "0123456789"; strcpy( string, str1 );}  试题2:void test2(){ char string[10], str1[10]; int i; for(i

2013-10-16 12:37:34 620

非常好的防火墙保密资料

防火墙保密资料

2013-12-05

linux c 系统编程

very good linux c 系统编程

2013-10-08

空空如也

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

TA关注的人

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