- 博客(38)
- 资源 (4)
- 收藏
- 关注

原创 列车实时数据通信协议(TRDP)探索之路【一】
前记:最近在开发TRDP协议项目,需求是在三层交换机上支持TRDP协议,故踏入不断研读协议深入源码之路。源码svn:https://svn.code.sf.net/p/tcnopen/trdp/ 可以下载最新的版本。编译:windows下可以使用VS工具直接编译相应代码 ;linux编译:cd trdp/configchmod a+x *mv buildsettings_posi...
2018-11-28 23:35:32
10019
10
原创 IEEE802.1x
背景:最近完成一个需求,要求交换机支持dot1x+radius+ tacacs+ ,因此研究了一下这个认证协议!简介IEEE802.1x是为了解决无线局域网网络的安全问题,提出的认证协议,后来,802.1x协议作为局域网接口的一个普通接入控制机制在以太网中被广泛应用,主要解决以太网内认证和安全的问题。802.1x,又被称为EAPOE,(Extensible Authentication Protocol Over Ethernet)。认证时采用了radius协议一种认证方式,不过同样也支持tac
2020-05-28 23:05:26
3491
原创 DHCP-packet
DHCPDynamic Host Configuration Protocol,动态主机配置协议,采用C/S模式,主要应用在为客户机自动分配IP地址、子网掩码、缺省网关、DNS服务器的IP地址等。基于UDP协议,采用的知名端口号如下:DHCP server:67DHCP client:68DHCPv6 Client:546协议报文DHCP一共有8种报文,按照客户端和服务...
2019-08-11 00:57:52
1328
原创 linux-文件权限
chmod#include <sys/stat.h>int chmod (const char* filename, int mode);filename是文件名mode文件权限,八进制数返回值:成功 返回0,失败返回-1。chown#include <unistd.h>int chown(const char *path, uid_t...
2019-08-02 00:21:12
236
原创 VLAN Tag/Untag Frame Forward Process
Link Type:Access:端口只能属于一个vlan,一般用于连接PCTrunk:端口可以属于多个vlan,可以接收和发送多个vlan的报文,一般用于交换机之间连接的端口Hybird:端口可以属于多个vlan,可以接收和发送多个blan的报文,与trunk的区别在于,hybird端口可以允许多个vlan的报文发送时不打tag,而trunk只允许缺省vlan的报文不打tag。A...
2019-07-28 00:47:35
349
原创 const-常量指针和指针常量
const常量指针eg:const int *p;指针指向的内容是常量。因此,内容不可以改变,但是指针地址可以改变。指针常量eg:int *const p;指针是常量。因此,指针地址不可以改变,指向的内容可以改变。#include <stdio.h>int main(){ int m = 10, n =20; const int *p1 = &a...
2019-07-18 22:02:21
390
原创 linux-内存寻址-内存地址
内存地址1.逻辑地址包含在机器语言指令中用来指定一个操作数或一条指令的地址。每个逻辑地址都由一个段(segment)和偏移量(offset)组成,偏移量指明了从段开始的地方到实际地址之间的距离。2.线性地址是一个32位无符号整数,可以用来表示4GB的地址,也就是高达4294967296个内存单元。线性地址通常用十六进制数字表示,范围从0x00000000到0xffffffff。...
2019-07-10 23:38:17
395
原创 linux-启动过程-systemd
操作系统的启动分为两个过程:boot(引导)和startup(启动)。boot阶段开始于打开电源开关,结束于内核初始化完成和systemd进程成功。启动阶段接管了剩余工作,直到操作系统进入可操作状态。因此,linux系统的启动过程如下:POST(BIOS上电自检)->GRUB(引导装载程序)->kernel init(内核初始化)->startsystemd(启动s...
2019-07-05 00:09:56
1001
原创 linux-IPC-ShareMemory
共享内存(ShareMemory)共享内存允许两个或多个进程共享一个给定的存储区。因为数据不需要在客户进程和服务器进程之间复制,因此,这是最快的一种IPC方式。使用共享内存的关键点在于:多个进程同步访问一个给定的存储区,若服务器进程正在把数据放入共享内存区,则它在做完这一操作之间,客户进程不能取这些数据。可以使用信号量、记录锁或者互斥量来完成同步过程。数据结构#include &...
2019-07-03 00:18:34
237
原创 linux-IPC-Semaphore
信号量semaphore信号量是一个计数器,用于为多个进程提供对共享数据对象的访问。常用的信号量形式为二元信号量(Binary semaphore)。它控制单个资源,初始值为1。但是,一般而言,信号量的初值可以是任意正数,该值表明有多少个共享资源单位可供共享应用。数据结构#include <sem.h>struct ipc_perm{ __kernel_key_t...
2019-07-02 22:17:12
309
原创 linux-IPC-消息队列
消息队列消息队列是消息的链接表,存储在内核中,由消息队列标志符标识。每个消息都包含一个正的长整型类型的字段、一个非负的长度以及实际的数据字节数,这些都在消息添加到队列时,传送给msgsnd。msgrcv用于在队列中取消息,消息并不一定需要先进先出,可以根据消息类型字段来取。特点1.生命周期随内核,消息队列会一直存在,需要调用接口显式删除或使用命令删除2.消息队列可以双向通信...
2019-07-01 22:10:54
259
原创 linux-IPC -PIPE
进程间通信 (InterProcess Communication,IPC)原因:由于不同进程地址空间也不同,A进程无法访问B进程的地址空间。任何一个进程的全局变量也无法被其他进程所见,因此,进程间通信必须通过内核。在内核中开辟一块缓冲区,A进程把数据从用户空间拷贝到内核缓冲区,B进程从内核缓冲区把数据读走,这便是IPC。管道(PIPE)1.PIPE是UNIX系统IPC最古老的形...
2019-06-26 23:41:38
230
原创 linux-UNIX socket
UNIX域套接字域套接字作为进程间通信的一种手段,值得我们研究一下。域套接字实现本地进程间通信,同样有服务端和客户端之分。一个进程作为客户端,另一个进程作为服务端。这个和TCP socket类似,但是不一样。域套接字不经过底层网络。数据结构使用的是struct sockaddr_un。对于这个结构,重点便是填充sun_family和sun_path,sun_path是文件路径。调用的so...
2019-06-25 20:05:45
1098
原创 linux-socket
socket系统调用socket函数族在系统调用时,同样遵循我上篇博客的 用户态->内核态,但是,我在寻找sys_socket定义时,只有函数声明asmlinkage long sys_socket(int, int, int);那么它的实现在哪儿呢?这里就需要有技巧了!这样实现都在net/socket.c文件。以socket函数为例,SYSCALL_DEFINE3(so...
2019-06-24 23:17:55
232
原创 linux-系统调用过程
调用过程:用户空间->内核空间INT 0x80(封装在C库函数中) -->system_call(系统调用处理程序)-->系统调用服务例程 -->内核程序系统调用时通过软中断指令INT 0x80实现的,这条指令会让系统跳转到一个预先设置好的内核地址,指向系统调用处理程序system_call。系统调用服务例程是对一个具体的系统调用的内核实现函数。执行任何系统...
2019-06-23 23:15:46
1005
原创 linux-asmlinkage
asmlinkage限定词(/linux 2.6/arch/x86/include/asm)#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))__attribute__是关键字,是GCC的C语言扩展,regparm(0)表示0个寄存器传递参数,即不从寄存器传送参数,强迫从栈中提取。如果regparm(3),那么...
2019-06-22 23:57:03
237
原创 linux 内存分配
进程内存分配:每个进程所分配的内存由很多“段”组成:(地址递增方向)1.文本段:包含了进程运行的程序机器语言指令2.初始化数据段:包含了显式初始化的全局变量和静态变量3.未初始化数据段:包含了未进行显式初始化的全局变量和静态变量4.堆:向上增长5.栈:向下增长虚拟内存管理1.每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址2.虚拟地址可以通...
2019-06-15 10:22:37
340
原创 SimpeSortAlgorithm
#include <stdio.h>#include <string.h>//排序算法文件//算法1:冒泡排序void bubbleSort(int *arr, int size){ int i, j, temp; for (i = 0; i<size; i++) for (j = 0; j<size-i-1;j++){ if ...
2019-06-12 00:14:41
145
原创 【MOOC】Graph-Part One
终于从MOOC上跟陈姥姥学Graph了!图(Graph)>表示“多对多”的关系>一组顶点:通常用V(Vertex)表示顶点集合>一组边:通常用E(Edge)表示边的集合边是顶点对,有向边<v,w>表示从v指向w的边(单行线)不考虑重边和自回路ADTG(V,E)由一个非空的有限顶点集合v和一个有限边集合e组成操作集:对于任意图G,v,...
2019-06-04 22:31:12
156
原创 Binary Tree -AVL
写在前面:对于AVL的印象一直停留在左旋、右旋的层次,具体的概念都已经忘记了。趁着复习二叉树的劲儿,又认真学习了一下AVL。这两天也看了不少关于AVL的资料和博客,这里感谢https://www.cnblogs.com/zhuwbox/p/3636783.html,博主写的很通俗易懂。感恩师兄,南无本师释迦牟尼佛(今天看了灵光寺舍利)。基本概念:AVL树的本质是BST,但它又有下面的特点:...
2019-06-02 23:31:06
207
原创 【MOOC】Binary Part -IV Huffman Tree && Huffman Coding
Huffman Tree带权路径长度(WPL):二叉树有n个叶子结点,每个叶子结点带有权值Wk,从根结点到每个叶结点的长度为lk,则每个叶子结点的带权路径长度之和就是WPL.最优二叉树或者哈夫曼树:WPL最小的二叉树哈夫曼树的构造方法:每次把权值最小的两颗二叉树合并。这里利用最小堆的特性,构造一个最小堆,每次返回最小的结点,返回两次则可以作为哈夫曼树的左右结点,权值为左右结点之...
2019-05-30 22:25:25
173
原创 【MOOC】Binary Tree -Part III Heap
Heap 堆考虑堆的概念,可以先考虑<优先队列>,取出元素的顺序是按照元素的优先级大小,而不是进入队列的先后顺序,即每次取出最大值或者最小值,则对应了最大堆MaxHeap和最小堆MinHeap的概念。堆的两个特性:>用数组表示的完全二叉树>任意结点的关键字是其子树所有结点的最大值(或者最小值),满足从根结点到任意路径上结点序列的有序性最大堆的操作:&...
2019-05-29 23:34:37
120
原创 【MOOC】BinaryTree -Part II BST (Binary Search Tree)
Binary Search Tree一颗二叉树,可以为空;如果不为空,则满足下列性质:>非空左子树的所有键值小于其根结点的键值>非空右子树的所有键值大于其根结点的键值>左、右子树都是BSTBST操作的特殊函数Position Find(ElementType x, BinTree BST):从BST中查找元素X,返回其所在结点的地址Positi...
2019-05-28 22:22:24
144
3
原创 【MOOC】Binary Tree-Part I
前记:大学时期学过的二叉树,N久没看。最近在跟MOOC浙大陈姥姥学习,温习一下。二叉树定义二叉树T:一个有穷的结点集合。这个集合可以为空;若是不为空,则它是由根结点和称之为左子树T-left和右子树T-Right的两个不相交的二叉树组成。二叉树具有左右顺序之分。特殊二叉树:斜二叉树(Skewed Binary Tree)。完美二叉树(Perfect Binary Tree) O...
2019-05-28 00:31:19
158
原创 String reverse order
1.String reverse order all string.#include <stdio.h>#include <string.h>/**"abcdefg"->"gfedcba"*/void reverse(char *p, char *q){ char tmp = 0; while(p<q){ /*exchange*/...
2019-05-22 23:15:47
171
1
原创 最大子列和问题
分治法:int Max3( int A, int B, int C ){ /* 返回3个整数中的最大值 */ return A > B ? A > C ? A : C : B > C ? B : C;} int DivideAndConquer( int List[], int left, int right ){ /* 分治法求List[left]到Li...
2019-05-19 21:15:27
137
原创 【APUE】线程-pthread
【线程标识】每个进程都有一个进程ID,每个线程也有一个线程ID。进程ID在整个系统中都是唯一的,但是线程ID不同,线程ID只有在它所属的进程的上下文中才有意义。#include <pthread.h>/*不同系统对于pthread_t结构定义不同,因此不能直接比较*/int pthread_equal(pthread_t tid1, pthread_t tid2);/...
2019-05-19 21:02:11
212
原创 【APUE】linux信号机制
【信号】软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信...
2019-04-23 20:01:14
196
原创 【APUE】进程一瞥
基本概念程序:存放在磁盘文件中的可执行文件进程:程序执行的实例(process)Cmd: ps ,top进程ID:每个进程都有一个非负整数标识的唯一进程ID0是调度进程,1是init进程,(大多数UNIX系统)2是页守护进程page daemon/*除了进程ID,进程还可以用下面的函数返回其他的标志符*/#include <unistd.h>pid_t...
2019-04-19 20:42:51
185
原创 列车实时数据通信协议(TRDP)探索之路【五】
时隔N久,才发现TRDP中的MD一直没有更新。距离项目已经好几个月了,大致已经忘光啦。何时能达到张无忌学习太极拳剑的地步QAQ。不过还是稍微总结一下吧 。MD大致也就是caller和replier的交互。需要做的工作便是加入监听的comId,然后发送call请求,剩下的便是在收包时做处理了。关于MD的类型也是有好几种,不同类型的处理流程也是不一样的。EXT_DECL TRDP_ERR...
2019-04-14 14:57:01
4728
11
转载 【转】跟我一起写 Makefile
Makefile得好好学啊!RT,转自大佬的【跟我一起写 Makefile】目录:Makefile学习教程: 跟我一起写 Makefile0 Makefile概述 0.1 关于程序的编译和链接 1 Makefile 介绍 1.1 Makefile的规则 1.2 一个示例 1.3 make是如何工作的 1.4 makefile中使用变量 1.5 让make自动...
2019-04-14 14:39:40
254
原创 浅析【RIP路由信息协议】
RIP简介RIP(Routing Infomation Protocol,路由信息协议)是一种较为简单的内部网关协议(Interior Gateway Protocol,IGP),主要用于规模较小的网络中,比如校园网和结构较为简单的地区性网络。对于更为复杂的环境和大型网络场景,一般不使用RIP,而是使用更为先进、可靠的OSPF协议。由于RIP协议的配置简单,协议理解也较为容易,我们从RIP学起...
2019-01-26 13:54:46
1665
原创 列车实时数据通信协议(TRDP)探索之路【四】
经过一段时间的学习,基于以太网交换机的TRDP PD开发调试结果已经正常了,故此,记录一下。TRDP基于生产者、消费者模型。TRDP PD 通信模式有两种,push和pull。在这两种模式中,网络设备又可以分为三种角色:publisher、subscriber、requester.publisher是数据的提供者,在push和pull模式中负责发送注册的comId的数据,即所谓的生产者...
2018-12-07 01:04:45
10407
11
原创 列车实时数据通信协议(TRDP)探索之路【三】
TRDP协议中传输的PD(Process-Data)和MD(Message-Data)。PD主要用于列车控制,传输命令和状态信息,数据量大,要求高可靠性、实时性和确定性,一般为周期性传送。MD主要用于故障和诊断信息,数据量长短不一,一般都是按需传送,需要确保实时性。PD和MD通信方式都是基于了生产者/消费者模型,包含了PUSH和PULL操作,设备角色有publisher、subscri...
2018-12-03 01:29:59
14068
原创 列车实时数据通信协议(TRDP)探索之路【二】
在【一】中已经对TRDP协议有了基本的了解,现在开始进行源码的深入了解。我checkout的是1.4.0.0的发布版,通过目录可以基本先了解大致结构。源码位于src目录下,/api提供了基本对外的API接口,/common包含了协议处理的核心代码,/vos包含了与操作系统对接的代码,支持了linux、VxWorks、Windows,操作系统接口大致为socket网络通信处理、内存管理以及任...
2018-12-01 11:40:54
7722
1
原创 打印机打印任务
/*COMPANY:HW*某个打印机根据打印队列执行打印任务。*打印任务分为九个优先级,分别采用数字1~9表示,数字越大优先级越高。*打印机每次从队列头部取出第一个任务A,然后检查队列余下任务中有没有比A优先级更高的任务,如果有比A优先级高的任务,则将任务A放到队列尾部,否则执行任务A的打印。*请编写一个程序,根据输入的打印队列,输出实际打印顺序。*函数原型:void printOrd...
2018-07-22 23:30:17
7326
原创 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
/**COMAPNY:HW*写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )*输入一个十六进制的数值字符串。*输出该数值的十进制字符串。*Author:*Date:2018/7/20 */#include <stdio.h>#include <string.h>#include <math.h>c...
2018-07-22 23:29:06
1969
原创 小白怎么使用git
最近在学习linux内核,就想顺便搞一下git,虽然日常工作使用的是svn,不过svn这种集中式版本控制工具在局域网内比较强悍,毕竟带宽可以刚住,每次都要先update一下,如果是在互联网上,大家分布式开发,网速显然并不能满足条件(50Kb路过)。 刚刚百度了一波git使用教程,并且亲自试验了一下,发现网上虽然说得比较详细,但是新手刚刚接触git,很容易就会GG,遇到一些奇怪问题也被...
2018-04-11 23:48:17
389
1
路由守护进程BIRD版本2.0.4源码及其文档
2019-05-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人