自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

coder

It's art

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

原创 unix环境高级编程(中文第三版)堪误

[1].  207页,错误语句“它调用setuid函数把有效用户ID设置为实际用户ID”,正确的应该是“它调用seteuid函数把有效用户ID设置为实际用户ID”(如果有发现,持续更新中)

2017-03-29 17:59:02 1809

原创 显式运行时加载

相比在编译期间显式链接,运行前隐式加载的方式,运行时显式链接并加载的方式显然更加灵活。这种方式可以控制程序在需要时加载指定模块,甚至可以在不需要时卸载,从而减少程序启动时间和内存消耗,以及实现热更新这种功能。linux上提供了以下4个api来支持共享对象的显式运行时访问void *dlopen(const char *filename, int flags) 加载一个共享对象, 同一...

2020-01-19 23:43:25 768

原创 i386和arm32架构下函数栈帧分析

栈帧的实现实际跟系统本身的架构密切相关,这里主要对i386和arm32两种架构下的栈帧展开分析。下面关于栈帧的分析都将基于这个例子进行:int func(int a,int b){ int sum; sum = a + b; return sum;}int main(void){ int sum; sum = func(1,2); ...

2018-10-24 15:15:36 1328

原创 libpcap源码分析_PACKET_MMAP机制

使用PACKET_MMAP机制的原因:        不开启PACKET_MMAP时的捕获过程是非常低效的,它使用非常受限的缓冲区,并且每捕获一个报文就需要一次系统调用,        如果还想获取这个报文的时间戳,就需要再执行一次系统调用.        而启用PACKET_MMAP的捕获过程就是非常高效的,它提供了一个映射到用户空间的长度可配的环形缓冲区,这个缓冲区可以用于收发报文. ...

2018-09-11 16:30:34 3732 1

原创 libpcap源码分析_从pcap_open_live说起

libpcap是跨平台网络数据包捕获函数库,本文将基于Linux平台对其源码以及核心原理进行深入分析备注: 以下分析都基于libpcap-1.8.1版本进行       以下分析按照库的核心API为线索展开       以下分析源码时只列出核心逻辑API: pcap_open_live   描述: 针对指定的网络接口创建一个捕获句柄,用于后续捕获数据   实现逻辑分析:    @d...

2018-09-06 21:16:54 7662

原创 APUE之mmap机制

mmap(memery-mapped I/O)可以将一个文件或其他对象(比如一段匿名内存)映射到进程的虚拟地址空间。mmap技术的用途主要有以下两个方面:    [1]. 将一个文件映射到进程的虚拟地址空间后,进程就可以直接访问这段虚拟地址来进行文件的I/O操作,而不再需要使用read、write等系统调用    [2]. 多个进程可以通过映射同一个文件实现共享内存,来作为进程间的一种IPC...

2018-07-31 08:21:31 506

原创 APUE之记录锁

记录锁提供的功能:         当第一个进程正在访问文件的某个部分时,使用记录锁可以限制其他进程访问同一文件区的行为        这里需要注意一点,记录锁支持锁定文件的一个区域(当然也可以是整个文件)fcntl记录锁接口格式:        int fcntl(int fd,int cmd,struct flock *flockptr)        @fd         - 要设置记录锁...

2018-06-25 19:48:31 183

原创 GNU make手册翻译系列(5)

4.6 没有配方或依赖的规则         如果一条规则没有配方或依赖,并且规则的目标不是一个存在的文件名,则执行此规则时,make就认为它的目标已经被更新过.这样的目标在作为一个规则的依赖时,因为依赖总被认为被更新过,因此作为依赖所在的规则中定义的命令总会被执行.看一个例子: clean: FORCE        rm$(objects)FORCE:这个例子中,目标"FORCE"就...

2018-05-11 15:20:09 309

原创 GNU make手册翻译系列(4)

4.5 伪目标      有这么一种目标,它不代表一个真正的文件名,执行make时可以指定这个目标来执行其所在规则定义的一系列配方,这种目标就叫伪目标.使用伪目标有两个原因:一个是避免跟同名文件出现冲突,另一个是提高执行make 时的效率.      如果你要书写这么一条规则:它的配方不会创建目标文件,并且反复指定make该目标时,它的配方都会被执行.下面就是一个例子: clean:    ...

2018-05-08 14:55:17 204

原创 GNU make手册翻译系列(3)

4.3 文件名使用通配符        单个文件名中可以使用通配符来指定许多文件.Makefile中的通配符和Bourneshell一样,包括"*","?","[...]".例如,"*.c"代表了当前工作目录下所有的以".c"结尾的文件.        以字符"~"开始的文件名有特殊的含义.当单独使用它或者其后跟一个斜线时,它都代表了你的home目录,例如"~/bin"

2018-05-05 12:04:21 266

原创 GNU make手册翻译系列(2)

4.2 依赖类型         实际上有两种不同类型的依赖可以被GNUmake程序理解:一种是之前章节中描述的常规依赖;另一种是"order-only"依赖.常规依赖主要陈述了两件事:首先,由于目标的配方在执行之前必须确保该目标的所有常规依赖都已经更新,所以这些常规依赖的书写顺序决定了各自的更新顺序;其次,它确定了一个依赖关系,就是如果有任意一个常规依赖比目标新,那么就认为目标已经过期而需要被重...

2018-05-04 16:29:22 158

原创 GNU make手册翻译系列(1)

前言本系列翻译参考网上广传的<<GNU make中文手册>>,之所以要再次翻译一遍原因有二:        原有翻译基于V3.8版本的GNU make,跟手头版本V4.2已经存在不少差异;        通过翻译深入理解GNU make另,翻译未按照手册章节顺序进行,不保证全部章节翻译,翻译内容尽量不添加个人观点.4 规则书写         Makefile中的规则描述了...

2018-05-04 14:34:11 603

原创 lua中的协程

协程,也叫协同式多线程,跟普通的多线程一样,一个协程就代表了一条独立的执行序列.协程和普通多线程的区别在于:    普通的多线程,也叫抢占式多线程,意味着线程间的调度通常是由操作系统来完成;    而协程间的调度并不通过操作系统,而是由当前运行的协程显式的进行切换.lua实现的协程是一种非对称式协程(asymmetric coroutine),这种协程机制需要通过两个函数来控制协程的执行,一个用于...

2018-04-16 20:09:34 1558

原创 APUE之I/O多路复用

I/O多路复用有3种具体实现模型:select、poll和epoll/* int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout) * @nfds 要监听的最大描述符编号加1,select支持的最大描述符编号为FD_SETSIZE(通常是10...

2018-03-07 15:34:40 234

原创 APUE之非阻塞I/O

I/O操作(比如open、read、write、send、recv等)默认都工作在阻塞模式,意味着调用时有可能会使进程永远阻塞;而处于非阻塞模式的I/O操作如果不能完成,则调用立即出错返回。备注:这里需要注意的一点是,针对磁盘的I/O操作(无锁情况下)不会引发进程永远阻塞,比如read磁盘中的一个空文件时就是直接返回0。      也可以理解为,针对磁盘的I/O操作不存在阻塞/非阻塞概念有两类方法...

2018-02-20 22:32:32 238

原创 APUE之异步信号安全和线程安全

1. 异步信号安全函数又被称为可重入函数,其定义源自单线程环境:        如果一个函数可以在执行期间的任意时刻被中断,并且可以在中断服务程序中再次被安全调用,以及在中断退出后还可以继续正确执行完函数的剩下部分内容,就称该函数为可重入函数。       1.1. 常用的可重入函数主要可以分为以下几类:        [1]. 所有套接字API,包括socket、connect、bind、acc...

2018-01-21 19:52:12 1266

原创 TCP/IP之ARP协议

1. 地址解析协议(ARP)提供了一种在IPv4地址和以太网地址之间的动态映射。   备注:        [1]. ARP仅用于IPv4,IPv6使用ICMPv6来完成类似的功能。        [2]. ARP仅工作在同一IP子网,这意味着ARP缓存中只会存在位于同一IP子网中的ARP表项。2. ARP帧格式(不考虑802.1q或其他标记)    字段名        

2018-01-06 10:52:19 1813

原创 TCP/IP之IP地址

1. IP地址的表示方式IPv4地址长度为32位,表示方式很简单,通常采用点分四组(又称为点分十进制)表示法,比如"192.168.9.10".IPv6地址长度为128位,完整的表示方法是采用8个块,块之间用":"分隔,每个块包含4个十六进制数,比如"5f05:0000:0000:0058:0000:0000:2023:1d71".[RFC4291]和[RFC5952]这两个标准化文档

2017-12-21 22:07:47 1752 1

原创 nDPI快速上手指南

nDPI快速上手指南这是一篇针对nDPI官方文档nDPI- Quick Start Guide的翻译,由于文档太老了(13年),所以部分接口已经发生了变化,本人将基于Version2.0对这些过时的接口进行更新。由于水平有限,翻译的、修补的内容不保证一定准确,各位最好上手之后对照源码细读一遍吧。目录1.介绍................................

2017-12-14 20:06:07 11753 1

原创 APUE之进程笔记(下)

1. 进程组    进程组是一个或多个进程的集合,同一进程中的各进程接收来自同一终端的各种信号。    每个进程组都有一个组长进程,组长进程ID就是该进程组ID。    只要进程组中有一个进程存在,该进程组就存在(跟组长进程是否提前终止无关)。    /* API  : pid_t getpgrp(void)     * 描述 : 返回调用进程的进程组ID     */    /* API  : ...

2017-11-13 09:10:27 245

原创 APUE之信号

1. 信号的本质    信号是在软件层次上对中断机制的一种模拟,是IPC机制中唯一的异步通信机制.    进程本身是无法直接处理信号的,而是必须事先将处理方式告诉内核,处理方式可以分为三种:        [1]. 忽略此信号        [2]. 捕捉信号。这种方式需要用户提供一个相应的信号处理函数        [3]. 执行该信号的默认动作。默认动作主要有:忽略

2017-10-24 19:31:25 348

原创 Linux环境编程主要头文件分析

适用于linux 3.14及以后---------------------------------------------------------------------------------------------------/usr/include目录下包含了linux环境编程时可以使用的所有头文件,这些头文件大致可以分为以下几类:    [1]. linux内核支持的API接口

2017-09-28 15:35:34 1007

原创 802.1x认证详细剖析

1.概述802.1X起源于无线网络标准802.11协议,802.11协议是标准的无线局域网协议,802.1X协议设计的最初的目的是为了解决无线局域网用户的接入认证问题,但由于其原理对于所有符合IEEE802标准的局域网具有普适性,因此在有线局域网中也得到了广泛的应用。802.1X,全称为Port-BasedNetworks AccessControl,即基于端口的网络访问控制。“基于端

2017-09-21 11:33:15 42227 2

原创 APUE之线程同步

1. 互斥量(pthread_mutex_t)    使用互斥量之前,必须先对它进行初始化,初始化互斥量的方式有以下2种:        [1]. 对于静态分配的互斥量通常在定义时就可以直接设置为常量PTHREAD_MUTEX_INITIALIZER        [2]. 对于动态分配的互斥量通常调用pthread_mutex_init进行初始化    /* API  : i

2017-09-20 09:58:10 411

原创 linux的netlink接口详解(下)

——linux版本: 3.14.38netlink支持用户进程和内核相互交互(两边都可以主动发起),同时还支持用户进程之间相互交互(虽然这种应用通常都采用unix-sock)但是有一点需要注意,内核不支持接收netlink组播消息本文将从用户进程发送一个netlink消息开始,对整个netlink消息通信原理进行展开分析用户进程一般都通过调用sendmsg来向内核或其他

2017-09-04 09:59:55 10472 1

原创 APUE之线程创建与终止

1. 线程ID(pthread_t)    类似于进程ID的定义,线程ID用于在所在进程中唯一标识一个线程,虽然在linux中使用无符号长整型表示pthread_t,但不建议在实际操作中直接当作整数处理    /* API  : int pthread_equal(pthread_t tid1,pthread_t tid2)     * 描述 : 用来比较两个线程ID,相等返回

2017-08-09 23:00:10 240

原创 APUE之线程属性

1. 多线程的优势:    [1]. 通过合理的分配任务到多个线程,每个线程在进行事件处理时可以采用同步编程模式,相比异步编程,同步编程简单方便很多    [2]. 多个进程间进行数据交互必须通过各种IPC机制,而同一个进程下的多个线程间共享同一片地址空间,数据可以直接交互    [3]. 通过合理的分配任务到多个线程,可以改善整个程序的响应时间和并发性能,即便是运行在单核CP

2017-08-07 23:30:01 302

原创 Lua中的栈概念

Lua中设计"栈"的目的就是解决Lua与C的通信。无论是Lua到C,还是C到Lua,所有的数据交换都需要通过"栈"来完成,此外还可以用"栈"来保存一些中间结果。"栈"解决了Lua和C语言之间存在的两大差异:        [1]. lua自带垃圾回收机制,而C需要手动显式的释放内存        [2]. lua使用动态类型,而C使用静态类型"栈"实际是由lua管理的,"栈

2017-07-14 15:22:49 1201

原创 lua元表概念

元表,顾名思义,它本身就是一个table,再具体一点说,就是用来存放元方法的table。元表的作用就是修改一个值的行为(更确切的说,这是元方法的能力),需要注意的是,这种修改会覆盖掉原本该值可能存在的相应的预定义行为。1. lua中的每个值都可以有一个元表,只是table和userdata可以有各自独立的元表,而其他类型的值则共享其类型所属的单一元表。   lua代码中只能设置

2017-06-25 23:15:09 3214

原创 linux的netlink接口详解(中)

本文介绍了linux内核中netlink模块的实现原理,主要包括整体架构和初始化相关

2017-06-23 13:36:13 2424

原创 APUE之进程笔记(上)

进程环境----------------------------------------------------------------------------------------------------1. 环境变量    每个进程在被创建的时候都会收到一张命令行参数表和一张环境变量表,通常两张表都位于本进程存储空间的顶部(栈之上)        获取环境变量的方法:

2017-06-14 16:18:01 344

原创 lua的代码块概念

1. chunk(代码块),可以是一条语句,也可以是一系列语句的集合,还可以是函数。   chunk拥有独立的"词法域",意味着chunk内部声明的局部变量和局部函数,仅在该chunk内可见。   chunk的定义方式主要有以下几种:            [1]. do ... end 可以显式定义一个chunk的作用范围            [2]. 在交互模式下,通

2017-06-11 23:12:21 2438

原创 lua中的迭代器分析

1. 所谓"迭代器",就是一种可以遍历某个集合中所有元素的机制,在lua中迭代器通常表示为函数,而具体的实现有很多种。   整个迭代的过程基本如下:            首先是通过迭代器工厂创建迭代器;            然后每次调用这个迭代器时,它就会从指定的集合中返回下一个元素;            直到最后一个元素返回后,迭代器就会返回nil,以此表示迭代结束

2017-06-04 16:12:21 805

原创 lua语言中的函数概念

1. 不同于C,lua中的函数是一种first-class-value,这意味着:            lua中的函数可以视作一种"值"存储到变量或table中;            可以作为其他函数的实参;            可以作为其他函数中的返回值;            可以嵌套在其他函数中被构造创建,而无需在设计阶段就定义好.   2. lua中的

2017-06-02 22:45:58 802

原创 openwrt 常用库用法

openwrt常用库用法libubox1.1.概述libubox是openwrt的一个基础库,openwrt下大部分应用都是基于它开发的(ubus、uhttpd、uci等)。libubox主要提供了两类功能:[1].一套完整的基于事件驱动的机制[2].多个常用的功能模块(链表、avl树、json、消息传输单元、md5)1.2.

2017-05-25 19:49:56 3888

原创 makefile整体性的一些概念

makefile的规则/***************************************************************************************************makefile的规则是makefile最核心的部分,规则的基本格式如下:        目标 ... : 依赖对象 ...            命令  

2017-05-16 19:33:47 388

原创 APUE笔记之系统数据文件

1. 口令文件(/etc/passwd 644)    口令文件记录了linux用户账户以及相关信息(密码除外),每一行中各字段定义如下:        struct passwd {        char *pw_name;  // 用户名        char *pw_passwd;// 加密口令        __uid_t pw_uid; // 用户ID  

2017-04-26 16:16:25 364

原创 linux下vlan的实现分析(上)

一. VLAN的核心概念    1. 划分VLAN的核心目的只有一个:分割广播域。       通过VLAN对广播域进行合理分割之后,一是可以缩小ARP攻击的范围,从而提高网络的安全性;二是可以缩小广播域的大小,从而提高网络的性能。       所以要注意的是,划分VLAN的目的中根本没有隔离不同VLAN用户互访这一说法,这只是划分VLAN之后的一种应用,不然使用三层设备实现不同V

2017-04-25 10:11:50 5703

原创 openwrt包的Makefile分析

******************************************************************************************************       一个标准的Makefile包大概可以简化为如下结构:                                                **

2017-04-14 15:43:22 3284

原创 linux的netlink接口详解(上)

内核版本:3.14.38netlink是一种用于内核态和用户态进程之间进行数据传输的特殊的IPC机制。特点:    1) 用户态采用socket风格的API    2) 除了预定义的协议类型之外,支持自定义协议类型    3) 异步通讯    4) 支持消息组播    4) 全双工(特别是支持内核主动发起会话)netlink涉及的数据结构:

2017-04-06 11:30:21 11890

空空如也

空空如也

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

TA关注的人

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