自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(92)
  • 资源 (7)
  • 收藏
  • 关注

原创 C语言变量的类型和存储位置

1. C语言变量主要分为全局变量、静态全局变量、局部变量、静态局部变量和寄存器变量。其中静态变量用static关键字进行修饰。程序所占用的内存可以分为以下几个部分:(1)代码段-存放程序代码,只读的,不能修改。(2)全局区(静态区),又称为数据段。其中.data段存放的是已经初始化的全局变量和静态变量(静态全局变量和静态局部变量)。.bss段存放的是未初始化的全局变量和静态变量(静态全局变

2013-09-25 20:19:32 3145 1

原创 C语言定义和声明区别

1. 变量的定义和声明C语言定义和声明分为变量的定义和声明和函数的定义和声明。由于,函数是具有全局外部特性,并且函数的定义和声明区别是很明显的。其声明需要返回值类型,函数名和参数列表。而函数的定义需要函数体。所以,很容易区别函数的声明和定义。对于变量的声明和定义,就不是那么明显。通常变量定义和声明的区别是有没有为变量分配内存。如果为变量分配内存就是定义,否则就是声明。变量声明可以出现多次,

2013-09-25 19:45:06 2840 1

原创 C语言头文件详解

1. 在由多个C语言文件组成的程序中,对于头文件的管理非常重要。头文件提供给用户一个接口,用户从中可以知道可以调用哪些函数,实现哪些功能,而不必去管这些功能的具体实现。因此,写好头文件是非常关键的。在头文件中,最常见的问题是"头文件的重复包含"。其意思是同一头文件被源文件包含多次。例如,定义了头文件test1.h和test2.h,其中test2.h包含test1.h,在test3.c中包含了tes

2013-09-25 18:43:43 2560

原创 Linux open系统调用流程(3)

1. 闲言少叙,继续分析__link_path_walk函数:/* * Name resolution. * This is the basic name resolution function, turning a pathname into * the final dentry. We expect 'base' to be positive and a directory

2012-12-30 13:57:40 1788 1

原创 Linux open系统调用流程(2)

1. 书结上文,继续分析do_filp_open函数,其传入4个参数:dfd:相对目录tmp:文件路径名,例如要打开/usr/src/kernels/linux-2.6.30flags:打开标志mode:打开模式/* * Note that while the flag value (low two bits) for sys_open means: * 00 -

2012-12-30 12:46:15 3713 1

原创 Linux open系统调用流程(1)

1.概述我们知道,Linux把设备看成特殊的文件,称为设备文件。在操作文件之前,首先必须打开文件,打开文件的函数是通过open系统调用来实现的。而简单的文件打开操作,在Linux内核实现却是非常的复杂。open函数打开原理就是将进程files_struct结构体和文件对象file相关联。那么具体是怎么实现的呢?让我们一起走进Linux内核文件打开流程。2. 首先,通过系统调用sys_ope

2012-12-30 12:20:28 3222

原创 Linux VFS 之mount系统调用

1. 我们知道,在对文件的打开,读和写操作之前,必须挂载文件系统。那么,内核如何挂载文件系统,换句话说,在挂载文件系统时内核都做了哪些事情。这是本文讨论的事情。在挂载文件系统之前,必须格式化文件系统类型,通过mkfs命令实现。在Linux中,一个文件系统类型包括多个文件系统,如/dev/sda, /dev/sdb都可以格式化为ext3类型的文件系统,即它们属于ext3. 每个文件系统都拥有一个超级

2012-12-28 20:22:14 2772 1

原创 Linux 文件系统注册过程

1. Linux文件系统的注册包括多种,可以将文件系统编译进内核,在系统启动时注册,也可以将文件系统编译为模块,在加载时注册。以编译进内核为例子,在init/main.c函数中:asmlinkage void __init start_kernel(void){    char * command_line;    extern struct kernel_param __star

2012-12-27 20:48:17 863

原创 Linux VFS相关结构体

1. 概述Linux 虚拟文件系统是建立在具体文件系统之上,其包括几种主要的对象,分别是超级块对象,目录项对象,索引节点对象,与进程相关的文件对象,安装点对象,文件系统类型对象。在VFS中,多个文件系统可以被安装在同一个目录,例如/dev/sda和/dev/sdb先后被安装在/project目录下,则/dev/sdb会隐藏/dev/sda文件系统。同一个文件系统也可以安装在不同的目录下,此时只

2012-12-27 20:12:08 1055

原创 Linux VFS-硬连接和软连接区别

1.inode节点Linux VFS其中有一个对象是索引节点,它记录了与具体文件相关的信息,存储在磁盘上,与磁盘上的文件控制块相对应。它用索引节点号进行标识,与数据区相对应,两个不同的数据区的inode节点号一定不相同。得用ls -il 可以查看inode节点号,如下所示:425153 drwxr-xr-x 2 root root    4096 07-15 19:18 ATIDriv

2012-12-21 16:24:17 649

原创 Linux VFS-通用文件模型相关对象

1.概述在Linux系统,为了隐藏具体文件系统的实现细节,提供了一个虚拟文件系统,VFS支持的文件系统可以划分为以下三个类型:(1)基于磁盘的文件系统Ext2, Ms-Dos(2)网络文件系统,可以通过网络访问其它文件系统上的内容,如NFS,SMB。(3)特殊的文件系统如/proc,存在内存的文件系统,可以通过通用文件系统接口访问相关信息,这类文件系统不占用磁盘空间。2. VF

2012-12-21 16:12:19 1270

原创 Linux网络编程之IPv6

1.IPv6特点我们已经学习过了流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM)和原始套接字(SOCK_RAWM),其中原始套接字的功能十分强大,能够传送自定义的数据包,侦听网络上的数据,拒绝服务攻击,发送ICMP包等等。但这些协议都是基于IPv4,接下来,我们学习一下IPV6下的套接字编程. 下面介绍一个IPV6协议。相对于IPv4,IPv6有如下一些显著的优势

2012-02-19 20:24:05 2095

原创 Linux网络编程之SYN洪水攻击

1.概述TCP建立连接需要3次握手,从IP层来看,客户端发送SYN请求,服务器对SYN响应,而客户端对服务器的响应再次确认才能建立连接。在服务器响应之后,等待一段时间,才能获得客户端的确认.从服务器接收到客户端的确认之前,服务器的资源一直占用。如果这时客户端不确认,那么这些连接就是半连接。通过建立大量的半连接,使服务器资源不断的减少,达到攻击的目的。或者是发送大量的SYN请求,使服务器不能够及

2012-02-19 19:31:43 1587

原创 Linux原始套接字之sniffer部分实现

1.概述 通常在同一个网段的所有网络接口都有访问在物理媒体上传输的所有数据的能力,而每个网络接口都还应该有一个硬件地址,该硬件地址不同于网络中存在的其他网络接口的硬件地址,同时,每个网络至少还要一个广播地址。(代表所有的接口地址),在正常情况下,一个合法的网络接口应该只响应这样的两种数据帧:   1、帧的目标区域具有和本地网络接口相匹配的硬件地址。   2、帧的目标区域具有"广播地址"

2012-02-19 12:46:21 254

原创 Linux原始套接字之ARP协议实现

1. ARP协议介绍 ARP(AddressResolutionProtocol)地址解析协议用于将计算机的网络地址(IP地址32位)转化为物理地址(MAC地址48位)[RFC826].ARP协议是属于链路层的协议,在以太网中的数据帧从一个主机到达网内的另一台主机是根据48位的以太网地址(硬件地址)来确定接口的,而不是根据32位的IP地址。内核(如驱动)必须知道目的端的硬件地址才能发送数据。当

2012-02-19 12:41:39 3249

原创 Linux网络编程之UDP洪水攻击

1.概述UDP攻击向目标主机的UDP端口发送大量的UDP报文,造成目标主机的端口堵塞,达到攻击的目的。建立多线程,利用原始套接字封装UDP与IP的首部,然后发送UDP报文,攻击目标主机.2. UDP攻击实例#include #include #include #include #include #include #include #include #in

2012-02-19 10:54:50 2126

原创 Linux网络编程之ICMP洪水攻击

1. ICMP洪水攻击原理ICMP洪水攻击基于PING协议,通过发送大量的PING包来攻击目标主机,主要攻击有3类:(1)直接洪水攻击,即通过多线程的方式一次性发送大量的ICMP包,其缺点是容易暴露,对方知道你的IP,可以直接屏蔽(2)伪装IP攻击, 在直接洪水攻击的基础上,将发送方的IP地址用伪装的IP地址来代替(3)反射攻击, 伪装目标主机向一群主机发送ICMP请求包,这样,这

2012-02-19 10:22:40 2329 1

原创 Linux网络编程之原始套接字-ping协议实现

1.概述PING协议是用来检验本地主机与远程主机是否连接,发送的是ICMP ECHO_REQUEST包。普通的套接字是基于TCP或者是UDP的,无法发送ICMP包,所以必须用原始套接字来实现。PING协议的客户端类型值为8,代码值为0,表示请求。而PING协议的响应端类型值为0,代码值也为0,表示应答. 以太网数据部分的最小值为46字节,而IP首部占20个字节,ICMP的首部占8个字节,所以P

2012-02-19 09:49:14 2338

原创 Linux 网络编程之原始套接字

1. 介绍前面主要介绍了流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),基本上能够满足TCP与UDP的应用。但一些问题,我们仍然无法解决,如:(1)发送一个自定义的IP包(2)发送ICMP包(3)侦听网络上的数据包(4)伪装IP地址(5)实现自定义的协议究其原因,标准的套接字与TCP,UDP层打交道,而原始套接字只与IP层,MAC层打交道。

2012-02-18 19:53:33 1479

原创 Linux网络编程之多播

1.概念单播是用于两个主机之间传送数据,广播是一个主机对局域网内的所有主机发送数据。而多播,又称为组播,它是对一组特定的主机通信。将网络上同一类型业务逻辑上分组,只和组内的成员通信,其它主机没有加入组则不能通信。与单播相同的是,组播允许在Internet上通信,而广播只是同一局域网内的主机通信。组播地址是特定的,D类地址用于组播,即244.0.0.0到239.255.255.255. 并划分为

2012-02-18 19:15:10 3462 2

原创 Linux网络编程之广播

1.概念前面介绍的TCP,UDP都是单播方式,即一对一.而广播是一台主机向局域网内的所有主机发送数据。这时,同一网段的所有主机都能接收到数据。发送广播包的步骤大致如下:(1)确定一个发送广播的接口,如eth0(2)确定广播的地址,通过ioctl函数,请求码设置为SIOCGIFBRDADDR得到广播的地址(3)使用这个广播地址进行广播由于TCP协议是端到端的协议,在通信之前,必须

2012-02-18 18:11:10 3509 1

原创 Linux网络编程之I/O复用循环服务器

1.介绍在前几节,我们介绍了循环服务器,并发服务器. 简单的循环服务器每次只能处理一个请求,即处理的请求是串行的。而并发服务器可以通过创建多个进程或者是线程来并发的处理多个请求。但由于进程或线程的切换会带来一定的开销。而且随着客户端请求的增多,创建的线程或进程的数目也越来越多,开销势必会增加。因此,本文提出了I/O复用的循环服务器。I/O复用的循环服务器创建两个线程,一个是客户端连接处理线程,

2012-02-18 14:27:48 1409 1

原创 Linux网络编程之高级并发服务器

1. 介绍在上一节,我们介绍了Linux简单的并发服务器,通过在服务器端建立多个子进程,来接收客户端的请求,实现并发处理,但这种方式明显有缺陷,服务器并不知道客户端请求的数量,所以事先建立的进程数不好确定。所以,这里介绍三种高级并发服务器模式。第一种是服务器端统一accept,接收客户端的到来,然后为每个客户端分配一个进程去处理. 第二种是统一accept接收请求,然后为每个客户端分配一个线程

2012-02-18 11:02:29 3291

原创 Linux网络编程之简单并发服务器

1.概念与前面介绍的循环服务器不同,并发服务器对服务请求并发处理。而循环服务器只能够一个一个的处理客户端的请求,显然效率很低. 并发服务器通过建立多个子进程来实现对请求的并发处理,但是由于不清楚请求客户端的数目,因此很难确定子进程的数目。因此可以动态增加子进程与事先分配的子进程相结合的方法来实现并发服务器。2. 算法流程(1)TCP简单并发服务器:    服务器子进程1:

2012-02-18 10:31:35 1958

原创 Linux网络编程之循环服务器

1.介绍Linux网络循环服务器是指逐个处理客户端的连接,处理完一个连接后再处理下一个连接,是一个串行处理的方式,比较适合时间服务器,DHCP服务器.对于TCP服务器来说,主要阻塞在accept函数,等待客户端的连接。而对于UDP服务器来说,主要阻塞在recv函数.2.循环服务器模型TCP循环服务器:算法如下:         socket(...);

2012-02-18 09:57:47 1348 2

原创 Linux 网络编程之ioctl函数

1.介绍Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的信息,所以,我们有必要了解一下ioctl函数的具体实现.2.相关结构体与相关函数#include int ioctl(int d,int request,....);参数:d

2012-02-18 09:15:49 7831 3

原创 Linux网络编程之套接字选项设置

1.介绍在Linux网络编程中,有时需要设置地址复用,允许发送广播包,将主机加入某个多播组,设置发送与接收缓冲区的大小,设置发送与接收的超时时间,将套接字绑定到某个接口上,发送TCP探测包查看客户端是否保持连接等,这些都需要对套接字选项进行设置.而对套接字选项进行操作的主要有以下两个函数,setsockopt与getsockopt. 这两个函数不仅能够操作套接字层,而且能够操作IP层与TCP层

2012-02-17 20:48:55 3577

原创 Linux 网络编程之UDP

1.介绍UDP协议是无连接的,不可靠传输的协议. 服务器与客户端的交互不需要建立连接,没有流量控制的功能。与TCP一样,它也是传输层协议,通信过程中需要IP地址与端口号。使用UDP进行程序设计包括服务器与客户端,下面介绍一下服务器与客户端的通信流程:服务器流程:(1)建立服务器套接字描socket(2)将地址结构绑定到套接字上 bind(3)数据传输 sendto/recvfr

2012-02-14 10:43:24 3612 1

原创 Linux网络编程之TCP(下)- I/O数据复用

1.介绍网络数据的发送与接收有多种方式,可以直接直接从套接字读取数据或向套接字写入函数,如read/write. 也可以通过向量发送与接收数据,如readv/writev. 另外还可以通过消息发送与接收数据,如sendmsg/recvmsg. 主要的I/O模型有以下几种:(1)阻塞I/O-通常情况下,当数据没有到来的时候,会阻塞进程一直等待数据,如recv函数,它是最常用的模型.(2)

2012-02-13 19:42:11 1364

原创 Linux 网络编程之TCP(上)

1.TCP通信流程TCP网络编程主要是用套接字来实现网络服务器与客户端通信,一个标准的套接字是由协议族,IP地址与端口号组成,它是TCP服务器与客户端通信的基础,TCP的服务器端流程:(1)建立套接字(socket)(2)将地址结构绑定到套接字上(bind)(3)监听本地端口,设置监听队列的长度,服务器将不能同时处理多个请求,将不能处理的请求放入等待队列中(listen)

2012-02-13 09:52:24 835

原创 Linux 通用块设备层基础之buffer_head

1. 块设备Linux 系统中能够随机访问的数据片(chunk)的设备称为块设备,这些数据片称为片。而字符设备是按照字符流的方式有序访问。常见的块设备如硬盘,CD-ROM,而字符设备主要有串口和键盘。块设备最小可寻址的单元称为扇区,通常情况下,扇区的大小为512个字节。而文件系统最小逻辑可寻址单元称为块。块的大小要比扇区大,但比页小,一般为512,1K,或者是4K. 内核执行磁盘的所有操作是按

2011-11-03 10:33:40 2712

原创 Linux shell应用2-自动下载文件

1. 概述Linux强大的命令行,能够完成各种不同的功能。然而,如果只是无休止的输入命令来完成功能,那么就太有点费事了。那么怎么能够解决这个问题了? Linux shell脚本给我们提供了答案。通过shell编程可以把命令进行组合,去自动的完成管理与执行任务。而不需要一次又一次的输入命令。这篇文章中,主要介绍一下,怎么利用shell脚本去完成自动下载文件的功能。2. 基本知识(1) Linux shell编程基础-包括awk,sed,正则表达式,在前面已经介绍过了。(2)ftp,lftpFTP是一个文件传输

2011-05-16 22:02:00 1634

原创 Linux shell应用1-自动配置网络

1. 概述Linux shell给我们提供了很多有用的命令,利用这些命令,能够自动的完成许多复杂的任务。如察看每个用户所占用的磁盘容量,CPU负载及内存情况,自动管理网络,定时下载等功能。而这篇文章中主要是介绍一下,利用脚本来实现自动配置网络。特别是固定IP的配置,对于初学者来说,配置网络可能比较麻烦,而通过shell脚本,就可以轻松的完成配置网络的功能。2. shell配置网络(1)网络知识介绍在前面的文章中,我们已经介绍了Linux shell基础编程,正则表达式和高级编程。简单回忆一下,其中基础编程,

2011-05-16 20:59:00 1993 1

原创 Linux 网络配置

1. 介绍Linux 网络管理主要涉及到一些配置文件和一些网络配置命令,熟悉这些文件和命令对于配置Linux网络十分重要。在本文中,主要介绍一下几个重要的网络配置文件和网络配置命令。2. 网络配置文件(1)/etc/hosts[root@localhost etc]#  cat # Do not remove the following line, or various programs# that require network functionality will fail.127.0.0.

2011-05-14 21:14:00 568

原创 Linux Shell 高级编程(下)

1.概述在前面的章节中,我们已经介绍了shell结构化命令,函数用法,正则表达式以及sed,gawk的基本用法,在这里,主要介绍一下sed和awk的高级用法。sed是流编辑器,具有速度快的优点。sed 每次处理一行数据,在每一行数据上执行脚本命令。而gawk是一种编程语言,能够对数据进行处理,从而生成数据报告。2. sed的高级用法(1)n与N的区别n: 小写n告诉sed编辑器移动到数据流中文本的下一行,而不是回到命令的开始。N: 大写N是将数据流的下一行添加到模式空间中去。即将数据流的两个文本行合并,添加

2011-05-13 19:55:00 840 1

原创 Linux shell编程之正则表达式

<br />1. 概述<br />正则表达式是用来筛选文本的模式模板。将正则表达式同数据相匹配,如果数据与模式一致,那么就接受处理,如果不一致,就不接受处理。<br />2. 正则表达式的类型<br />基本的BRE引擎:<br />(1)纯文本<br />用标准的文本匹配来处理数据。<br />如:<br /> <br />[root@localhost chapter17]# echo "this is a test"|sed -n '/test/p'<br />this is a test<br

2011-05-13 15:15:00 1998 1

原创 Linux shell高级编程(上)

1. 概述在前面的章节中,我们讲解了shell脚本的基本编程,包括结构化命令,读取用户输入和测试命令。而这篇文章主要是描述shell脚本的高级编程部分,包括创建函数,流式编辑器sed和gawk的基本用法。2. 函数部分(1)基本格式:function name() {commands}示例:!/bin/bash#using a function in a script#格式:function name(){ command}function func(){echo "this is an e

2011-05-13 11:43:00 4655 2

原创 Linux Shell基本编程(下)

<br />1. 结构化命令<br />(1)if-then语句<br />if command<br />then <br />commands<br />fi<br />示例:<br /> <br />#!/bin/bash<br />#testing multiple commands in the then section<br />testuser=root<br />if grep $testuser /etc/passwd<br />then<br /> echo the

2011-05-12 20:01:00 1010 1

原创 Linux shell基本编程(上)

1.概述Linux Shell是用户与Linux内核交互的接口,通过Shell脚本可以执行很多复杂的功能。Shell脚本对于Linux系统管理员提供很好的帮助,能够自动化执行一些例行的管理任务。也能够监控系统数据和数据文件到为上级生成报告。总之,Linux Shell脚本非常的强大,非常有利于我们进行数据的处理以及自动化管理。2. 显示消息echo命令.echo命令能够简单的显示文本字符串。既可以用单引号,也可以用双引号来标记字符串的类型,如果字符串有包含引号,那么用一种引号类型来标记文本字符串即可。

2011-05-12 18:17:00 827 1

原创 Linux Samba服务器架构

1.概述在同一网络中,为了更加合理的利用网络资源共享,经常需要共享打印机与文件,在网络中同时存在Linux与Windows主机时,要借助于Samba服务来共享资源。该服务主要用于Linux系统与Windows系统之间共享资源。Samba用于在UNIX上实现SMB(Session Message Block,服务信息块协议),是一个工具套件。在Windows中,SMB协议通常用于实现文件与打印机共享。2. Samba服务的配置

2011-04-29 21:53:00 689

Linux自动配置静态上网脚本

此脚本能够自动的静态配置网络,会提示您输入相关的网络配置信息,能够很容易的配置网络

2011-05-17

linux下mplayer解码器

解码器:essential-20071007.tar.bz2,windows-essential-20071007.zip

2010-12-07

linux下mplayer

主程序: MPlayer-1.0rc2.tar.bz2 解码器: essential-20071007.tar.bz2,windows-essential-20071007.zip 皮肤:Orange-1.3.tar.bz2

2010-12-07

Linux下锐捷安装软件

linux下锐捷上网所需要软件,具体安装用法请看博客

2010-12-06

JNI(java native interface)英文完全手册

JNI中的各种接口函数以及命令函数,JNI英文完全手册

2010-09-09

android字典程序

此程序能够实现在线查词,本地查词,收藏单词,自动过滤功能.

2010-09-02

android音乐播放器

能够实现音乐的顺序,循环,随机播放,定点播放,显示播放进度等.

2010-07-29

空空如也

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

TA关注的人

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