- 博客(64)
- 资源 (3)
- 收藏
- 关注
原创 从 H264 码流中解析出 nal 单元
在应用层,很多时候 IDR、SEI、PPS、SPS 是打包在一起收到的, 需要手动解析出这几种帧类型。定义 nalu 结构:typedef struct{ uint32_t len; //! Length of the NAL unit (Excluding the start code, which does not belong to the N
2016-12-28 14:42:11 2621
转载 字节对齐注意事项
对齐准则 先来看四个重要的基本概念: 1) 数据类型自身的对齐值:char型数据自身对齐值为1字节,short型数据为2字节,int/float型为4字节,double型为8字节。 2) 结构体或类的自身对齐值:其成员中自身对齐值最大的那个值。 3) 指定对齐值:#pragma pack (value)时的指定对齐值value。
2016-02-25 11:14:52 1600
转载 UDP punch(打洞|穿透)
目标路由穿透,实现广域网P2P通讯。4种典型NAT类型按照NAT设备在进行地址映射时行为的不同,NAT可以分为以下四种: Full Cone Restricted Cone Port Restricted Cone Symmentric 如何判断本机NAT类型可以通过PyStun来判断:NA
2015-12-10 13:15:55 2933
原创 RaspberryPi 树莓派启动报错 mmcblk0: error -110 解决方法
错误信息:mmcblk0: error -110 transferring data, sector 136999, nr 225, cmd response 0x900, card status 0xb00end_request: I/O error, dev mmcblk0, sector 136999由于树莓派比较挑SD卡,看看你的卡是不是在这个列别中:htt
2015-07-23 14:37:34 11612 4
原创 通过valgrind 输出的偏移地址定位源码行号
有时用valgrind定位内存泄露问题时当内存泄露的位置在动态库(so)中时, 输出的调用栈为问号"???"并且没有指明源码的行号.即使尝试了加 -g 的编译参数并且程序退出前不执行dlclose,也无济于事.==29941== 17 bytes in 1 blocks are definitely lost in loss record 29 of 197==29941== at
2015-01-28 13:33:56 6292 2
转载 Makefile 编写
CC = g++OBJS = main.o base.o derive.oEXEC = test$(EXEC): $(OBJS) $(CC) -o $@ $^main.o: main.cpp base.h derive.h $(CC) -c $<base.o: base.cpp base.h $(CC) -c $<derive.o: de
2014-03-24 21:49:00 748
转载 EPS QOS 体系解读
EPS承载的用处 与3G不同,EPS中只有数据(PS域)业务,用户与网络间必须先建立 EPS承载(Bearer) 之后,才能在承载之上使用各种数据业务(如IMS语音业务、上网业务、FTP、游戏。。。)。每种数据业务的业务流,称为一个业务数据流SDF,它可以用一个IP五元组来表示(IP包中的源、目的IP地址、源、目的端口、协议(如TCP、UDP等),IP地址可以支持模糊匹配) ,这
2014-03-20 10:36:04 7749
转载 UDP用打洞技术穿透NAT的原理与实现
首先先介绍一些基本概念: NAT(Network Address Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用。NAT分为两大类,基本的NAT和NAPT(Network Address/Port Translator)。 最开始NAT是运行在路由器上的一个功能模块。
2014-03-13 16:16:13 1351
转载 常用算法经典代码(C++版)
//一、快速排序void qsort(int x,int y) //待排序的数据存放在a[1]..a[n]数组中 {int h=x,r=y; int m=a[(x+y)>>1]; //取中间的那个位置的值 while(h<r){while (a[h]<m) h++; //比中间那个位置的值小,循环直到找一个比中间那个值大的 while (a[r]>m) r--; /
2014-02-17 13:47:40 5924
转载 spin_lock 总结
如果被保护的共享资源只在进程上下文和软中断上下文访问,那么当在进程上下文访问共享资源时,可能被软中断打断,从而可能进入软中断上下文来对被保护的共享资源访问,因此对于这种情况,对共享资源的访问必须使用spin_lock_bh和spin_unlock_bh来保护。当然使用spin_lock_irq和spin_unlock_irq以及spin_lock_irqsave和spin_unlock_i
2013-09-11 14:49:37 774
转载 Per-cpu 变量
1. 简介2.6内核的特性,每个处理器都拥有自己的变量副本。2. 优势每个处理器访问自己的副本,无需加锁,可以放入自己的cache中,极大地提高了访问与更新效率。常用于计数器。3. 使用相关头文件:(1) 编译期间分配声明:DEFINE_PER_CPU(type, name);避免进程在访问一个per-CPU变量时被切
2013-08-14 14:35:11 1239
转载 Linux系统下,CPU信息详解(cpuinfo,多核,多线程)
在Linux系统中,如何详细了解CPU的信息呢? 当然是通过cat /proc/cpuinfo来检查了,但是比如几个物理CPU/几核/几线程,这些问题怎么确定呢?经过查看,我的开发机器是1个物理CPU,4核8线程,Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz记录一下,判断的过程和知识。判断依据:1.具有相同core id的cpu是同一个co
2013-07-08 14:12:59 1029
转载 Linux 下多核CPU知识
1. 在Linux下,如何确认是多核或多CPU:#cat /proc/cpuinfo如果有多个类似以下的项目,则为多核或多CPU:processor : 0......processor : 12. Linux下,如何看每个CPU的使用率:#top -d 1之后按下1. 则显示多个CPUCpu0 : 1.0%us,
2012-07-31 13:18:41 1162
转载 linux 编译,链接和加载
出处:http://duanple.blog.163.com/blog/static/7097176720111141085197/1. 序最近在折腾各种.so,碰到了一些问题,一开始对于很多错误也没有头绪,茫然不知所措。索性化了一天多时间将>中部分内容略读了一遍,主要是关于编译,链接和加载这块的。于是顺便做个笔记,方便以后回顾。基本上知道了这些,对于编译,链接
2012-07-19 10:30:47 14688
转载 bash 比较
二元比较操作符比较两个变量或是数值。注意整数和字符串比较的分别。整数比较-eq等于if [ "$a" -eq "$b" ]-ne不等于if [ "$a" -ne "$b" ]-gt大于if [ "$a" -gt "$b" ]-ge大于等于if [ "$a" -ge "$b" ]-lt小于if [ "$a" -lt "$b" ]
2012-05-23 16:43:48 888
转载 linux select 函数和 fd_set 用法
select()机制中提供一fd_set的数据结构,实际上是一long类型的数组,每一个数组元素都能与一打开的文件句柄(不管是socket句柄,还是其他文件或命名管道或设备句柄)建立联系,建立联系的工作由程序员完成,当调用select()时,由内核根据IO状态修改fe_set的内容,由此来通知执行了select()的进程哪一socket或文件可读。 多端口复用函数select在调用前要首
2012-04-09 15:24:52 10504
转载 linux C程序中获取shell脚本输出
Table of Contents1. 前言2. 使用临时文件3. 使用匿名管道4. 使用popen5. 小结1. 前言Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作。比如实现一个ping程序来测试网络的连通性,实现ping函数需要写上200~300行代码,为什么
2012-01-04 13:44:19 686
转载 linux解压 tar命令
tar命令tar [-cxtzjvfpPN] 文件与目录 .... 参数: -c :建立一个压缩文件的参数指令(create 的意思); -x :解开一个压缩文件的参数指令! -t :查看 tarfile 里面的文件! 特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在! 因为不可能同时压缩与解压缩。 -z :是否同时具有 gzip 的属
2011-12-16 16:05:42 472
转载 二进制操作解析
有六个位操作符,他们是: & 与 | 或 ^ 异 ~ 按位求反 >> 右移 & 与操作符 &操作符比较两个数,只有要比较的两个值的相应位都被设置(为1-译者注)时,返回的值相应位才被设置。这些比较位使用下面的表进行比较: 1 & 1 == 1 1 & 0 == 0 0 & 1 == 0 0 & 0 == 0 这个操作符理想的应用是
2011-12-05 13:53:22 1030
转载 AWK 学习笔记
1. awk简介awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想
2011-11-23 14:23:42 562
转载 回调函数
回调函数调用关系图 对于第一种情况,主程序可以从执行到回调函数,也可以不执行回调函数,关键看宿主函数是否调用了回调函数。对于第二种情况,主程序可以从执行到回调函数,也可以不执行回调函数,关键看宿主函数是否调用了回调函数。主程序不知道宿主函数什么时候调用回调函数,因为调用函数启动了线程,这样,主程序就不必关心宿主函数什么时候调用回调函数了,主程序可以释放出来做自己的事了。代码示例
2011-11-21 17:15:28 1416 1
转载 GPRS所使用的数据传输协议
数据由用户的手机到因特网要经过四个设备,MS(Mobile Station,手机)、BSS(Base Station System,基站系统)、SGSN(Serving GPRS Support Node,服务GPRS节点)和GGSN(Gateway GPRS Support Node,网关GPRS节点)。其中,SGSN和GGSN是新增设备,而MS和BSS需要进行设备的软硬件升级。 它们的主要
2011-11-21 10:31:34 6690
转载 GTP协议的分析
一、 引言在GPRS系统的GSN(GPRS Support Node,包括SGSN和GGSN)之间采用GTP(GPRS Tunnel Protocol)协议,GTP在整个GPRS协议栈中起着举足轻重的作用,GTP协议承载在TCP或UDP协议之上,分为信令平面和传输平面,其信令平面定义了多种消息,涉及到GPRS许多重要方面,传输平面则提供了GSN之间数据包传送的隧道。另外以GTP为基础的GT
2011-11-09 10:17:37 27255 2
转载 GTP(GPRS Tunnelling Protocol)协议
GTP(GPRS Tunnelling Protocol)协议在GPRS 骨干网中在GSNs 之间(如 SGSN 和 GGSN)提供协议信道,所有的PTP 分组数据协议的PDUs 应由GTP 协议进行封装。GTP概述 GTP 协议应用在SGSN 和GGSN 之间,为各个移动台(MS) 建立GTP 通道,GTP 通道是GPRS服务节点(GSN) 之间的安全通道
2011-11-09 10:15:29 30809
转载 Linux下IP地址格式转换(支持IPv4和IPv6)
函数inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6,原型如下 #include #include #include int inet_pton(int af, const char *src, void *dst);这个函数转换字符串到网络地址,第一个参数af是地址族,转换后存在dst中 inet_pton 是inet_addr的扩展,
2011-11-03 14:32:41 11024
转载 找了好久:awk 赋值给 shell 变量的方法
result='week(now(),-1) 49';var=`echo $result|awk '{print substr($result,16,3)}'`;echo $var;SYSFILE_NAME=`echo "$CONTROL_FILE" | awk -F"." '{print $1}' | awk -F"/" '{print $NF}'`;
2011-10-20 16:33:14 34413 3
转载 各种工具之正则表达式语法比较
在各种常用的工具中,正则表达式如此的相似却又不同。下表列出了一些常用的正则表达式,以及其不同之处。项目总多,遗漏必有不少,请各位看官不吝指出。以perl的正则为基准,不同的用法以粉红色标出。grep 2.5.1egrep 2.5.1se
2011-10-13 15:47:40 841
转载 自动ssh登录的几种方法
1. 自动ssh/scp方法==A为本地主机(即用于控制其他主机的机器) ;B为远程主机(即被控制的机器Server), 假如ip为192.168.60.110;A和B的系统都是Linux在A上运行命令:# ssh-keygen -t rsa (连续三
2011-10-11 17:17:30 794
转载 linux bash环境下面给expect脚本传递参数
#!/usr/bin/expect# file name :rauth# Usages : rauth username [ passworld ]# Description : 自动发送用户名与密码# 运行 myxrgsu -aif { $argc != 2 &&
2011-10-11 16:09:07 11478
原创 自己常用的 vim 命令
光标移动:h\j\k\l:左\下\上\右gg\G:文本开头\结尾ctrl+u\p:上\下翻页w\b:单词前\后插入:i\a:光标前\后插入I\A:行前\后插入选择:v\V\ctrl+v:自由选择\行选择\块选择
2011-09-16 10:36:22 674
转载 vim 插件 ctags 和 taglist 的安装和使用
1.ctags(1)到http://ctags.sourceforge.net/下载ctags源码ctags-5.6.tar.gzhttp://prdownloads.sourceforge.net/ctags/ctags-5.6.tar.gz(2)解压并安装ta
2011-09-15 15:54:49 742
转载 spinlock自旋锁de使用
Linux内核中最常见的锁是自旋锁。一个自旋锁就是一个互斥设备,它只能有两个值:"锁定"和"解锁"。如果锁可用,则"锁定"位被设置,而代码继续进入临界区;相反,如果锁被其他进程争用,则代码进入忙循环并重复检查这个锁,直到锁可用为止。这个循环就是自旋锁的"自旋"。自旋锁最多只能被一
2011-09-14 15:57:44 2978 1
转载 Linux kernel 进程的睡眠和唤醒
Linux进程的睡眠和唤醒1 Linux进程的睡眠和唤醒在Linux中,仅等待CPU时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状 态标志位为TASK_RUNNING。一旦一个运行中的进程时间片用完, Linux
2011-09-13 17:06:27 3905
原创 c++ 读写文件安全又简洁的方法
#include #include #include using namespace std;int get_file_content(string sFileName, string& sFileContent);int main(int argc, char*
2011-08-30 14:11:09 1530
原创 boost regex 详解
boost::regex的默认正则表达式语法是perl语法 boost::regex支持perl regular表达式、POSIX-Extended regular表达式和POSIX-Basic Regular表达式,但默认的表达式语法是perl语法,如果要使用
2011-08-30 10:20:47 27046 2
原创 linux 下 kernel + kthread + 内核list + vmalloc + vfree + interruptible_sleep_on_timeout 学习实例
code:#include #include #include #include #include #include #include #include #include #include #include typedef struct tag_i
2011-08-26 15:52:49 1499
转载 不同情况下构造skb数据包的实现
在我这个网络接口的程序中(can0),其实难点就是怎样组包。怎样在原来数据包的基础加上自己的数据,怎样构造ip头,怎样构造udp头。调试了两个星期,终于是调通了,在这个过程中,通过看内核源代码和自己组包的尝试,大概对组包的方法有了些了解,记录在此,留做备忘,也希望能给需要
2011-08-10 16:46:40 1434
转载 解析IPV4报文 和IPV6 报文的 checksum 的算法
校验和(checksum)算法,简单的说就是16位累加的反码运算:计算函数如下:我们在计算时是主机字节序,计算的结果封装成IP包时是网络字节序,注意这两者之间的区别,我们在从IP包里读取要转化为主机字节序,往IP包里存入时要转化为网络字节序在存入。UINT
2011-08-10 16:44:04 9311 1
转载 任意类型数的bit位操作
#include typedef int type;void binary_type(type number, int binary[]){ int len = 8 * sizeof(type); int k = len -1; int j =
2011-08-10 16:42:17 937
转载 掌握 Linux 调试技术
本文讨论了四种调试 Linux 程序的情况。在第 1 种情况中,我们使用了两个有内存分配问题的样本程序,使用 MEMWATCH 和 Yet Another Malloc Debugger(YAMD)工具来调试它们。在第 2 种情况中,我们使用了 Linux 中的 strace 实
2011-08-10 11:04:11 541
12.0 (16A5308d) (16A5308e) support file 真机调试文件
2018-06-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人