- 博客(34)
- 收藏
- 关注
转载 视频音频常用编码解码介绍
来源http://blog.csdn.net/luchy/archive/2007/03/27/1542478.aspx 这里只对常见的视频音频编码做一个系统的简单介绍,并不进行详细探讨。由于我的知识有限,难免有错误的地方,欢迎来信指正。MPEG 系列
2011-08-11 11:40:36
1078
1
原创 sort
<br />1) Bubble排序,又称冒泡排序<br /> 算法思想正如其名,冒泡,若是按升序进行排序的话,即是"大数下沉":<br /> /* * 数组a, 数组个数: lm * 让数组a里的最大(升序为例)的数下沉到最后一个位置 * "大数下沉"的算法是稳定的算法 */for(j = 0; j < lm - 1; j++){ if(a[j] > a[j + 1]){ tmp = a[j]; a[j] = a[j + 1];
2010-11-13 12:53:00
691
3
原创 单目运算符++ --
<br /> 关于这个知识点的总结很早就想写啦,前缀++、后缀++是在笔试的时候频繁出现的。<br /> 以前对她的理解只是表面上的,从网上搜索到一个总结:<br /> 前缀++,是先加后赋值,<br /> 如 i = 1; <br /> m = ++i;<br /> 最后 m 和 i 的值都是2。<br /> 后缀++,是先赋值后加,<br />
2010-10-25 10:06:00
7601
1
原创 udhcp源码详解(五)
<br />udhcp源码详解(四) 之DHCP包--options字段<br />Author : hui <632254504@qq.com><br />From : <http://blog.csdn.net/hui_love2046><br />Created : 2010-10-25<br /> <br /> 中间有很长一段时间没有更新udhcp源码详解的博客,主要是源码里的函数太多,不知道要不要一个一个讲下去,要知道讲DHCP的实现理论的话一篇博文也就
2010-10-25 08:28:00
4930
2
原创 udhcp源码详解(四)
udhcp源码详解(四) 之租赁IP的管理Author : hui From : Created : 2010-10-4 Server端对于租赁出去的IP的管理是基于结构体dhcpOfferedAddr的,该结构体的定义是在leases.c文件里:(结构体的成员介绍说明见详解之数据结构)struct dhcpOfferedAddr { uint8_t chaddr[16]; uint32_t yiaddr; /* network order */ uint32
2010-10-23 17:01:00
5631
原创 udhcp源码详解(三) 下
<br />udhcp源码详解(三) 下 之配置信息的读取<br />Author : hui <632254504@qq.com><br />From : <http://blog.csdn.net/hui_love2046><br />Created : 2010-10-3<br /> <br /> 上节讲解了read_config函数,读取配置信息到server_config的相应成员变量里,但read_config函数只负责把配置信息重文件里读出来,具体怎么把信息填写到指定
2010-10-03 21:48:00
4358
1
原创 udhcp源码详解(三) 上
<br />udhcp源码详解(三)上 之配置信息的读取<br />Author : hui <632254504@qq.com><br />From : <http://blog.csdn.net/hui_love2046><br />Created : 2010-10-3<br /> <br /> 上节介绍了存储管理配置信息的结构体struct server_config_t,该结构体贯穿整个server端程序的运行。<br />在dhcpd.c里的用该结构体定义个一
2010-10-03 16:22:00
4954
2
原创 udhcp源码详解(二)
<br />udhcp源码详解(二) 之定义的结构体<br />Author : hui <632254504@qq.com><br />From : <http://blog.csdn.net/hui_love2046><br />Created : 2010-10-2 --- 2010-10-3<br /> <br />定义的数据结构对于C程序的重要性,不言而喻。面向对象设计的程序是一个个对象的集合,而面向过程语言设计的程序则是数据结构与算法的集合。<br />下面来
2010-10-03 13:46:00
7852
1
原创 udhcp源码详解(一)
<br />udhcp源码详解(一) 之文件组织结构(dhcp server)<br />Author : hui <632254504@qq.com><br />From : <http://blog.csdn.net/hui_love2046><br />Created : 2010-10-2<br /> <br /> udhcp目录下有十几个源文件,一个源文件相对应一个模块,完成一系列相关的功能,例如在static_leases.c主要针对static_lease链
2010-10-03 13:40:00
7889
原创 udhcp详解源码(序)
udhcp源码详解(序)Author : huiFrom :Created : 2010-10-1 这篇udhcp详解是基于busybox-1.20里的…/busybox-1.20/networking/udhcp/目录下的源码进行讲解与分析,主要是对udhcp server端源码进行的讲解,client端相对于server端相对简单一些,源代码上面表现的实现思
2010-10-03 13:38:00
5076
原创 本地数据与网络数据--字节序转换的实现
<br /> 在进行网络编程的时候,经常会涉及到字节序的转换问题(关于字节序的概念在这略过)<br /> 在系统中为我们实现了这些转换的函数,如ntohs、htons等。<br /> <br />自己尝试着实现这些函数:<br /> 首先要判断主机使用的是什么字节序,这样我们才知道怎样转换:<br /> <br /> 判断主机字节序函数(大端字节序返回1, 小端字节序返回0):<br />/*File: net.c * */static inline
2010-09-24 09:57:00
1513
1
原创 定义网络数据报文--字节对齐
<br /> 在用户层实现ARP协议的时候<br /> <br /> 定义ARP协议的报文:<br /> <br />struct _arp{ unsigned short arp_hrd; //硬件地址类型 unsigned short arp_pro; //协议地址类型,IP unsigned char arp_hlen; //硬件地址长度 unsigned char arp_plen;
2010-09-24 09:09:00
4002
1
原创 Bootloader的启动流程(二)
<br />Bootloader的启动流程(二)<br /> <br />上次我们的bootloader启动到了函数Main,回顾一下Main前面bootloader的做哪些操作。<br /> <br />首先从地址0x00开始设置arm中的7种异常向量表,系统复位属于复位异常,所以系统启动从复位异常向量0x00位置执行b Reset;<br />跳转到Reset处执行,关闭watch dog,禁止所有中断,设置系统时钟,等硬件初始化工作,要执行C程序之前要设置栈指针R14(SP),跳转到C程序Main函数
2010-09-24 07:58:00
609
原创 Bootloader的启动流程(一)
<br />Bootloader的启动流程(mini2440的vboot为例):<br /> <br /> 系统启动的入口点。<br /> 程序的入口点是在/board/QQ2440/u-boot.lds中指定的,其中ENTRY(_start)说明程序从_start开始运行,而他指向的是cpu/arm920t/start.o文件。<br /> 我们用的是ARM920的cpu架构,在复位后从地址0x00000000取它的第一条指令,所以我们将Flash映射到这个地址上
2010-09-18 07:25:00
1409
1
原创 学习笔记——进程通信IPC之信号量
上节学习了进程间利用共享内存,进行通信。利用共享内存通信非常方便,高效,每个进程都可往共享内存里读写数据,但是并发的进程间的执行顺序是我们无法控制的,这样就可能出现诸如在读取信息之前覆盖内存空间等竞争条件。我们就需要一种机制来协调我们并发进程访问共享内存,以避免竞争状态的出现。 Linux提供一个用于进程同步的信号量(进程信号量或称为System V信号量)。包含信号量操作函数声明以及一些宏定义的头文件:#include #include #include 与用于创建,销毁共
2010-08-24 11:18:00
814
原创 学习笔记——进程通信IPC之共享内存
<br />进程通信IPC之共享内存<br /> <br />共享内存是进程间大量数据通信效率最高的一种方式,进程通过调用系统函数,获得一块共享内存,与自己的进程内地址绑定,这样访问跟访问进程自己的地址空间一样,所以也是很方便的一种通信方式。<br /> <br />与共享内存操作相关的系统调用声明及一些宏定义包含在下面头文件里:<br />#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h><br /> 创建获得一块共享内存:
2010-08-21 21:44:00
631
原创 读者与写者问题
<br /> 操作系统课程上,在介绍信号量的时候一般都以读者与写者的问题作为例子,上理论的时候,看到都是伪代码。昨天我们上到线程,晚上的时候尝试用线程的互斥体实现了读者与写者,很直观的看到了读者与写者的竞争:<br /> <br />以下代码是以读者优先的(读者写者平等很好修改代码的,写者优先可能会复杂些):<br /> <br />#include <stdio.h>#include <stdlib.h>#include <pthread.h>struct _Reader_arg
2010-08-17 21:23:00
815
原创 僵死进程
Linux系统中,如果子进程结束了,它是不是简单地就消失了呢?但是这样它退出返回时的相关信息——譬如它是否正常结束,以及它的退出值也一起丢掉。那它到底以什么形态存在于系统中呢? 在Linux系统中,子进程在结束的时候,Linux会给父进程发送一个SIGCHLD的信号,而父进程对该信号的的处理,决定了已结束的子进程以什么样的形态存在于系统。(父进程先于子进程结束等下我们再做讨论)1、当子进程先于父进程结束: 对SIGCHLD采用默认的处理方式#include #inclu
2010-08-16 08:46:00
1058
原创 通用链表(内核双向循环链表list_head)
<br /> 在数据结构上学习链表一般都是这么定义的:<br /> struct _DList<br /> {<br /> DataType data;<br /> ……<br /> ……<br /> struct _DList *next;<br /> struct _DList *prev;<br /> };<br /
2010-08-06 10:43:00
948
原创 const 与 define
看到const 与 define 第一印象你或许会想到定义常量,定义常量可以使程序的可读性增强,若在程序中多次用到常量时,修改起来也很方便。 但是知道const 与define 的区别吗,还有他们的作用仅只有定义常量吗? 当然const与define是由区别的,而且区别是很大的。 1)、编译器处理他们的时间不一样。 编译一个程序分为四个阶段: 1、预处理阶段,2、编译阶段,3、汇编阶段,4、链接 const是在编
2010-08-05 20:33:00
382
原创 再谈数组与指针
在以前的一遍博文中,有谈到数组与指针,经过了一段时间,我对数组与指针的认识又更深入了一些………(一)、数组与指针什么时候通用,什么时候不通用? 数组与指针在一些地方是通用的,也有一些地方是不能互换的。 数组与指针在通用的时候,数组是退化成指针,我们对数组的操作就可以转化成对指针的操作。 例如对数组里元素的访问就 a[i] 实际上编译会之后会变成 *(a+i), 即使通过指针来访问元素的;数组作为形参传递给函数…… 那数组在哪些情况不会退化指针呢?有三种情况下数组不会
2010-07-27 22:18:00
497
原创 排序——快速排序(quick_sort)
<br /> 快速排序(quick_sort)算法:<br /> <br />下面的代码都是按照升序来做的:<br /> <br /> int quick_sort(int a[], int nL, int nR) //a是要排序的数组,nL是指向数组的左端,nR是指向数组的右端<br /> {<br /> int i, j;<br /> int nKey;<br /> <br />
2010-07-26 21:39:00
633
原创 用链表实现的栈
<br /> <br /> 链表是相当重要的数据结构,对于链表的操作,只有多多练习才会有感觉。以下是我用链表实现的栈:<br /> <br /> <br />/*<br /> *File: stacklist.h<br /> *<br /> */<br /> <br /> <br />#ifndef_STACKLIST_H_<br />#define _STACKLIST_H_<br /><br />typedefstruct _StackNode{<br /> int dat
2010-07-26 13:25:00
541
原创 以 2、3……16 进制输出一无符号整型数
以 2、3……16 进制输出一无符号整型数,代码如下: 递归算法: void binary_to_ascii(unsigned int value, short int binary) //value是要求输出的数,binary是进制 { unsigned int quotient; //临时变量存储每次的商 quotient = value / binary;
2010-07-26 07:59:00
1609
原创 itoa与atoi ftoa与atof的实现
有的系统库中有提供这两个函数的实现,前两天也自己尝试写写这两个函数,代码实现如下: /*============itoa=============*/ /*把num转换成字符串存放在str 指向的字符串里*/ int myitoa(int num, char *str) { int temp; int sign = 0; //标记num的符号 char *p;
2010-07-24 10:38:00
12301
2
原创 关于关闭文件的操作函数fclose()
这两天学习到对文件的操作,对于文件的标准操作流程是: 用fopen()这个函数打开文件,之后通过fopen()返回的指针对文件进行读写操作,操作完成之后调用fcolse()的函数来关闭文件。 但是不知道大家注意到没有,关闭文件函数fclose(),要求传入的只是文件的指针,假设是fp,在函数的内部可能通过传入的这个指针实现了对通过fopen分配的内存进行释放以及把文件缓冲区的内容写入文件,但是并不能在函数内部对fp赋空,这样在释放掉通过fopen()分配的内存后,FILE* 类型的
2010-07-22 17:40:00
6891
2
原创 字符串操作
这两天练习中,做好多个字符串相关的练习,字符串在C程序中应用也是非常多,自己针对这两天不断地与她打交道,对于字符串的操作做一些总结。1、 字符串、字符数组: char str1[5] = {'H', 'e', 'l', 'l', 'o'}; char str2[] = "Hello"; 上面的第一个 str1 只能是字符数组,如果在程序中把它当做字符串处理的话就会出错。 第二个 str2 就是一个字符串。 上面的字符数组的大小 s
2010-07-22 16:22:00
530
原创 数据结构 栈
栈 是 数据结构中很重要的一个结构体,特点是 后进先出,由于栈的特点程序设计使用的频率很高。 下面是我写的一个很简单的栈以及一些对栈的操作:/* *File: stack.h *Author:hui *Created:2010-7-20 *Modified: */#define MAXSIZE 100typedef struct _stack{ char element[MAXSIZE]; int top;}stack;stack* cr
2010-07-21 08:26:00
350
原创 关于我写的strcpy的延伸出的问题——程序运行时内存的分配
上篇博文上我自己写了一个strcpy,只是简单的解决了标准库函数strcpy由于dest目的字符串大小不足以存储下需要复制的字符串而产生的越界问题, 在我的strcpy中dest的字符串大小是在函数里分配的,分配的大小根据需要复制的字符串大小而定,这样就不会产生越界问题了。 但我只考虑了分配内存给dest字符串,却未考虑释放自己分配给dest的内存。这里也就是在程序中动态的分配内存,需要自己释放分配的内存空间,不然要等到程序结束由系统来回收这些内存。有时程序结束之前我不已经不需要使用这块
2010-07-21 08:10:00
1148
原创 自己写的 字符串函数strcpy
字符串函数char *stcpy(char *dest, const char *src) 是将原字符串 src 的内容复制到 目的字符串 dest 里。但是strcpy()函数是一个很危险的函数,如果需要复制源字符串 src 的大小比目的字符串 dest 大,调用函数的时候,并不会报错,复制字符串的时候,分配给目的字符串的内存不够存储要复制的字符串,复制的时候就 依次 覆盖其他的内存空间,这样会造成不可预见的错误。 我自己写的strcpy()的思想是: 函数中的 目
2010-07-19 21:00:00
1437
1
原创 C中数组与指针
在这里随便定义一个数组 int arr[5]; arr现在就是数组名, arr 代表的是该数组整块内存,即sizeof(arr) == 20 (假设sizeof(int) == 4), arr 里的内容是该块内存的首地址,即 arr == &arr[0] 。 arr可以看做是一个常量,也就不可以使用 arr++ 之类的运算。 int *p; p = arr; p是一个指向int类型的指针,p = arr,就是把数组的首地址(arr的内容就是数组的首地址
2010-07-19 20:10:00
19407
10
原创 C函数的参数传递
C函数的参数传递,在以前的学习中,知道函数参数传递分为值传递与地址传递。对这两种的参数的传递,一直都不是那么很清楚的理解,一直到昨天老师给我看了一个面试题,才真正的明白C函数的参数传递。 void GetMemory(char *p) { p = (char*)malloc(100*sizeof(char)); } int main() { char *str; str = NULL;
2010-07-19 08:15:00
1154
原创 Linux开发基础(2010.7.11-2010.7.14)——学习笔记
<br /><br />2010-7-11<br />Linux基本命令:<br />1、cd change directory<br />2、ls list [-l](显示详细) [-a](显示所有文件)<br />3、pwd print work directory<br />4、mkdir [-p](可以是一个路径的名称。此时若此路径中的某些目录尚不存在,在加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录)<br />5、rmdir<br />6、fil
2010-07-18 13:17:00
563
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人