- 博客(41)
- 收藏
- 关注
转载 原始套接字
基于原始套接字编程 在开发面向连接的TCP和面向无连接的UDP程序时,我们所关心的核心问题在于数据收发层面,数据的传输特性由TCP或UDP来保证: 也就是说,对于TCP或UDP的程序开发,焦点在Data字段,我们没法直接对TCP或UDP头部字段进行赤裸裸的修改,当然还有IP头。换句话说,我们对它们头部操作的空间非常受限,只能使用它们已经开放给我们的诸如源、目的I
2012-11-26 11:29:33 467
转载 tftp
一、tftp协议介绍 TFTP是一个传输文件的简单协议,它其于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的。此协议设计的 时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中 有三种模式:netascii,这是8位的ASCII码形式,另一种是octet,这是8
2012-11-26 11:28:16 673
转载 信号灯
一、信号灯简介Linux支持System V的信号灯(semaphore),是一种进程间通信的方式,只不过它和管道、FIFO或者共享内存不一样,信号灯主要用于同步或者互斥对共享资源的访问,它的发明来源于火车运行系统中的"信号灯",利用信号灯可以实现"PV"操作这种进程间同步进制。P操作时获得资源,将信号灯的值减1,如果结果不为负则执行完毕,进程获得资源,否则进程睡眠以等待的进程释放
2012-11-26 11:20:33 750
转载 信号量
1.信号量的概念 信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识。信号量在此过程中负责数据操作的互斥、同步等功能。 当请求一个使用信号量来表示的资源时,进程需要先读取信号量的值来判断资源是否可用。大于0,资源可以请求,等于0,无资源可用,进程会进入睡眠状态直至资源可用。 当进
2012-11-26 10:45:52 619
转载 内存映射
一. 概述 内存映射,简而言之就是将用户空间的一段内存区域映射到内核空间,映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,相反,内核空间对这段区域的修改也直接反映用户空间。那么对于内核空间用户空间两者之间需要大量数据传输等操作的话效率是非常高的。 首先,驱动程序先分配好一段内存,接着用户进程通过库函数mmap()来告诉内核要将多大的内存映射到内核
2012-11-26 10:44:21 397
转载 共享内存
共享内存是系统出于多个进程之间通讯的考虑,而预留的的一块内存区。在/proc/sys/kernel/目录下,记录着共享内存的一些限制,如一个共享内存区的最大字节数shmmax,系统范围内最大共享内存区标识符数shmmni等,可以手工对其调整,但不推荐这样做。一、应用共享内存的使用,主要有以下几个API:ftok()、shmget()、shmat()、shmdt()及shmctl()。
2012-11-26 10:36:04 376
转载 Linux消息队列进程通信的介绍
Linux消息队列进程通信的介绍关键字:Linux 一、消息队列的基本概念消息队列 (也叫做报文队列)是Unix系统V版本中3种进程间通信机制之一。另外两种是信号灯和共享内存。这些IPC机制使用共同的授权方法。只有通过系统调用将标志符传递给核心之后,进程才能存取这些资源。这种系统IPC对象使用的控制方法和文件系统非常类似。使用对象的引用标志符作为资源表中的索引。 消息队列就
2012-11-26 10:29:47 335
原创 linux下时间有关的函数和结构体
1、时间类型。Linux下常用的时间类型有4个:time_t,struct timeb, struct timeval,struct timespec,clock_t, struct tm.(1) time_t是一个长整型,一般用来表示用1970年以来的秒数.该类型定义在中.一般通过 time_t time = time(NULL); 获取.(2) st
2012-11-23 15:35:16 371
转载 signal
信号集int sigemptyset( sigset_t *set)int sigfillset(sigset_t *set)int sigaddset(sigset_t *set, int signum)int sigdelset(sigset_t *set, int signum)int s
2012-11-23 15:33:02 367
转载 哈希链表
/* * ===================================================================================== * * Filename: hash.c * * Description: hash表 * * Version: 1.0 * Crea
2012-11-23 12:12:01 563
转载 哈希算法
简介哈希方法学哈希函数和素数位偏向各种形式的哈希常用的哈希函数各版本哈希代码下载哈稀函数按照定义可以实现一个伪随机数生成器(PRNG),从这个角度可以得到一个公认的结论:哈希函数之间性能的比较可以通过比较其在伪随机生成方面的比较来衡量。一些常用的分析技术,例如泊松分布可用于分析不同的哈希函数对不同的数据的碰撞率(collision rate)。一般来说,对任意一类的数据存在
2012-11-23 11:49:42 628
原创 心跳包
Socket编程中:心跳包的实现机制 心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。 在TCP/IP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项:SO_KEEPALIVE。系统默认是设置的2
2012-11-23 10:57:11 575
原创 多播
1.概念: 多播是对需要接收该流量的客户端发送的一组数据,是一种无害的广播。2.优点: 不影响不接收该多播数据的主机,能够节约网络带宽,降低主机处理负担。3.多播地址: 224.0.0.0--239.255.255.255,没有像单播ip段那样有广播地址和网络地址之分了。 具体:224.0.0.0--224.0.0.255 本地保留,给知名协议使用,ttl=1。其中
2012-11-23 10:48:18 408
原创 linux下广播的写法
只有UDP才能设置广播,TCP没有广播只能是单播。服务器端#include #include #include #include #include #include #include #include int main(int argc,char *argv[]){ int socket_fd; int n; i
2012-11-23 10:10:44 504
原创 静态库和动态库
一、什么是库 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的本质不同,因此二者库的二进制是不兼容的。Linux操作系统支持的函数库分为静态库和动态库,动态库又称共享库。Linux系统有几个重要的目录存放相应的函数库,如/lib /usr/lib。二、静态函数库、动态函数库A. 这类库的名
2012-11-22 17:42:13 433
翻译 Netstat 命令的常用方法
1. 列出所有端口 (包括监听与非监听端口)使用netstat -a列出所有端口# netstat -a | moreActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 localhost:30037
2012-11-22 08:58:12 504
转载 socket编程原理
socket编程原理 1 问题的引入 UNIX系统的I/O命令集,是从Maltics和早期系统中的命令演变出来的,其模式为打开一读/写一关闭(open-write-read-close)。在一个用户进程进行I/O操作时,它首先调用“打开”获得对指定文件或设备的使用权,并返回称为文件描述符的整型数,以描述用户在打开的文件或设备上进行I/O操作的进程。然后这个用户进程多次调用“读/写”以传
2012-11-22 08:55:29 305
转载 交叉编译
如何交叉编译应用程序,技巧,注意事项。最近大家都涉及交叉编译应用程序,感觉大家的路子有点偏,觉得有必要纠正一下。 一般的应用程序编译的步骤无外呼 ./configure && make && make install 但是对于交叉编译不能照搬,尤其要注意不能轻易make install(当然如果指定了 --prefix就无所谓了, 否则可能会覆盖标准路径的程序就惨了) 这里有
2012-11-22 08:52:35 554
转载 USb的基础补习
在进入学习之前,先认识一下USB的重要关键字,这些关键字也是在以下的学习里面将出现的字眼:1、端点:位于USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据,每一个端点都有惟一的确定地址,有不同的传输特性(如输入端点、输出端点、配置端点、批量传输端点)2、帧:时间概念,在USB中,一帧就是1MS,它是一个独立的单元,包含了一系列总线动作,USB将1帧分为好几份,每一份中是一个
2012-11-22 08:51:42 318
转载 usb开发的基础
一、USB命令在USB规范里,对命令一词提供的单词为“Request”,但这里为了更好的理解主机与设备之间的主从关系,将它定义成“命令”。 所有的USB设备都要求对主机发给自己的控制命令作出响应,USB规范定义了11个标准命令,它们分别是:Clear_Feature、Get_Configuration、Get_Descriptor、Get_Interface、Get_Status、Set
2012-11-22 08:50:24 443
转载 如何编写Linux下的USB键盘驱动
如何编写Linux下的USB键盘驱动1. 指定USB键盘驱动所需的头文件: #include /*内核头文件,含有内核一些常用函数的原型定义*/#include /*定义内存分配的一些函数*/#include /*模块编译必须的头文件*/#include /*输入设备相关函数的头文件*/#include /*linux初始化模块函数定义*/#include /*USB设
2012-11-22 08:49:44 591
转载 Linux下USB驱动之skeleton分析
Linux下USB驱动之skeleton分析1.结构体 内核其实就是一坨坨的数据结构,加上一根根链表。 对于初学者,如果直接看USB驱动代码,大概会被那些名字相近的结构体弄得晕头转向,比如usb_host_interface和usb_interface,看着看着就把两个混淆了。所以,在学习USB驱动之前,建议把相关结构体都拎出来看一下,其实,也就那么几个结构体在那装神弄鬼。USB
2012-11-22 08:49:00 459
转载 Linux I2C核心、总线与设备驱动
第十五章 Linux I2C核心、总线与设备驱动本章导读I2C总线仅仅使用SCL、SDA两根信号线就实现了设备之间的数据交互,极大地简化对硬件资源和PCB板布线空间的占用。因此,I2C总线被非常广泛地应用在EEPROM、实时钟、小型LCD等设备与CPU的接口中。Linux定义了系统的I2C驱动体系结构,在Linux系统中,I2C驱动由3部分组成,即I2C核心、I2C总线驱动和I2C设
2012-11-22 08:47:29 749
转载 系统调用
统调用系统调用1什么是系统调用 系 统调用,顾名思义, 说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的 调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口——它好比一个中间
2012-11-22 08:46:35 460
转载 ramdisk
ramdisk 一 什么是RamDiskRam:内存,Disk:磁盘,在Linux中可以将一部分内存当作分区来使用,称之为 RamDisk。对于一些经常被访问、并且不会被更改的文件,可以将它们通过RamDisk放在内存中,能够明显地提高系统性能。RamDisk工作于虚 拟文件系统(VFS)层,不能格式化,但可以创建多个RamDisk。虽然现在硬盘价钱越来越便宜,但对于一些我们想让其访问
2012-11-22 08:45:23 1763
原创 字符设备驱动编写步骤
字符设备驱动编写步骤1.标准字符设备驱动 a.注册设备号 如 if(key_major) /*静态注册*/ err = register_chrdev_region(devno, 1, DEVICE_NAME); else { /*动态注册*/ err = alloc_chrdev_region(&devno, 0,
2012-11-22 08:44:22 623
转载 Linux终端设备驱动
第十四章 Linux终端设备驱动本章导读在Linux系统中,终端设备非常重要,没有终端设备,系统将无法向用户反馈信息,Linux中包含控制台、串口和伪终端3类终端设备。 14.1节阐述了终端设备的概念及分类,14.2节给出了Linux终端设备驱动的框架结构,重点描述tty_driver结构体及其成员。14.3~14.5节在14.2节的基础上,分别给出了Linux终端设备驱动模块加载/
2012-11-22 08:42:01 694
转载 Linux块设备驱动
Linux块设备驱动 第十三章 Linux块设备驱动本章导读块设备是与字符设备并列的概念,这两类设备在Linux中驱动的结构有较大差异,总体而言,块设备驱动比字符设备驱动要复杂得多,在I/O操作上表现出极大的不同,缓冲、I/O调度、请求队列等都是与块设备驱动相关的概念。本章将向您展示Linux块设备驱动的编程方法。13.1节分析块设备I/O操作的特点,对比字符设备与块设备在I/O
2012-11-22 08:41:01 721
原创 kill_fasync及fasync_helper
kill_fasync及fasync_helperkill_fasync及fasync_helper用于异步通知中kill_fasync(&dev->async_queue, SIGIO, POLL_IN); //向app发可读信号,dev->async_queue可用来区分向谁发那个进程调用这个fasync_helper就向谁发int fasync_helpe
2012-11-22 08:37:56 2784
转载 如何判断连接状态断开,Linux:C/Socket多路复用select(),阻塞
就是通讯任意一方可以任意发送消息,有消息来到时会收到系统提示去接收消息。先建立好套接字,然后绑定,转化为监听套接字,接受连接。这里要用到select函数。使用步骤如下:1、设置一个集合变量,用来存放所有要判断的句柄(file descriptors:即我们建立的每个socket、用open打开的每个文件等)2、把需要判断的句柄加入到集合里3、设置判断时间4、开始等待,即se
2012-11-21 18:24:01 1361
转载 Linux文本编辑器Vim/Vi
Linux文本编辑器Vim/Vi (最常用的,最实用的命令)Linux插入命令a 在光标之后插入字符A 把光标移动到行首尾进入插入模式i 在光标之前插入字符I 把光标移动到行首并进入插入模式o 在光标下插入新行O 在光标上插入新行Linux定位命令h左 j下 k上 L右$ 移至行尾0移至行首(数子0)H 移至屏幕的上端M
2012-11-21 16:57:18 440
原创 LINUX环境并发服务器的三种实现模型
LINUX环境并发服务器的三种实现模型1 循环服务器与并发服务器模型在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提出了特殊的要求。目前最常用的服务器模型有:·循环服务器:服务器在同一时刻只能响应一个客户端的请求·并发服务器:服务器在同一时刻可以响应多个客户端的请求1.1 UDP循环服务器的实现方法:UDP循环服务器每次从
2012-11-21 16:43:36 1010
转载 recv send 阻塞和非阻塞
recv send 阻塞和非阻塞阻塞和非阻塞 阻塞函数在完成其指定的任务以前不允许程序调用另一个函数。例如,程序执行一个读数据的函数调用时,在此函数完成读操作以前将不会执行下一程序语句。当服务器运行到accept语句时,而没有客户连接服务请求到来,服务器就会停止在accept语句上等待连接服务请求的到来。这种情况称为阻塞(blocking)。而非阻塞操作则可以立即完成。比如,如果你希望
2012-11-21 16:12:13 947
转载 Linux网络编程之广播
Linux网络编程之广播 1.概念前面介绍的TCP,UDP都是单播方式,即一对一.而广播是一台主机向局域网内的所有主机发送数据。这时,同一网段的所有主机都能接收到数据。发送广播包的步骤大致如下:(1)确定一个发送广播的接口,如eth0(2)确定广播的地址,通过ioctl函数,请求码设置为SIOCGIFBRDADDR得到广播的地址(3)使用这个广播地址进行广播
2012-11-21 14:42:08 552
原创 pcap的用法
1 #include 2 3 char errbuf[PCAP_ERRBUF_SIZE]; 4 5 pcap_t *pcap_open_live(const char *device, int snaplen,int promisc, int to_ms, char *errbuf) 6 pcap_t *pcap_open_dead(int linktype,
2012-11-21 14:02:22 9305
转载 网络函数
1.字节序函数#include uint16_t htons(uint16_t host16bitvalue);uint32_t htonl(uint32_t host32bitvalue);返回:网络字节序值uint16_t ntohs(uint16_t net16bitvalue);uint32_t ntohl(uint32_t net32bitvalue);返回:
2012-11-21 14:00:38 966
原创 Tcpdump的用法
简介用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。 实用命令实例默认启动tcpdump普通情
2012-11-21 13:59:23 1641
原创 fdopen的用法
函数名:fdopen功能:把流与一个文件句柄相接 #include FILE*fdopen(intfildes,constchar*mode); 函数说明 fdopen()会将参数fildes的文件描述词,转换为对应的文件指针后返回。参数mode字符串则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。 程序例: #inc
2012-11-21 11:55:34 3186
转载 Daemon函数的用法
Daemon函数的用法说明:让一个程序后台运行。原型:#include int daemon(int nochdir, int noclose); 参数:当nochdir为零时,当前目录变为根目录,否则不变;当noclose为零时,标准输入、标准输出和错误输出重导向为/dev/null,也就是不输出任何信息,否则照样输出。返回值:deamon(
2012-11-21 11:26:59 620
转载 linux 守护进程编写
linux编程-守护进程编写 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待 处理某些发生的事件。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。 同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程
2012-11-21 11:03:16 326
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人