char 与 unsigned char的本质区别 char 与 unsigned char的本质区别在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-128~127, unsigned char没有符号位,
Git branch的分析 1). Commit相当于是一个快照,可以理解为是一个指向tree对象(记录当前版本文件系统,文件系统可以用tree来描述)的指针。Commit message是对commit的一个概要描述,如果要引用commit,需要通过该commit的SHA1来引用。2). Branch其实是一个指向commit的指针。但是branch和commit并不是一一对应的关系,因为直到你切换branch之前
Git 的origin和master分析 Git 的origin和master分析 http://lishicongli.blog.163.com/blog/static/1468259020132125247302/ 首先要明确一点,对git的操作是围绕3个大的步骤来展开的(其实几乎所有的SCM都是这样)1. 从git取数据(git clone)2. 改动代码3. 将改动传回git(
浅谈linux2.4 内核中断下半部分(softirq机制) linux2.4 内核中断下半部分(bottom half)理解(请结合linux2.4内核代码看):首先先说一下为什么要采用中断下半部分:中断服务函数大多需要在关中断的情况下去执行,但是有的中断服务函数执行需要较长的时间,如果系统长时间关中断就会让其他的中断得不到响应,所以把需要关中断执行的部分放到中断的上部分,而把对实时性要求不高,不需要关中断执行的操作放到中断下半部分中去。但是中
工作中的主观臆断 昨天遇到linux2.6下webs命令不能使用的情况,但是在另一个项目上是能用的,两个项目上的uboot、内核都是一样的,唯独文件系统是裁剪过的,于是首先定位是文件系统的问题。一点一点恢复文件系统后(主要是lib下面的东东),发现还是不行。这期间怀疑过应用的问题,但是应用的程序放到另一个项目上又是能用的,没办法,搞不定,最后老大出马了,首先他和我思路是一样的,把能用的文件系统一点一点的添加到裁剪的
从大端模式buf中提取想要的位数 #define EXTRACT_32(_X) (((U32)*(_X+0) << 24) | ((U32)*(_X+1) << 16) | ((U32)*(_X+2) << 8) | ((U32)*(_X+3) << 0))#define EXTRACT_32N(_X) ((*(_X+3) << 24) | (*(_X+2) << 16) | (*(_X+1) << 8) | (*(_X+0) << 0))#define EXTRACT_24(_X
设置ip及dns过程中,形如"192.001.000.020"设置不成功,需转换为"192.1.0.20" //设置ip及dns过程中,形如"192.001.000.020"设置不成功,需转换为"192.1.0.20"CSUDI_Error_Code CSUDITcpipStrToIp(const char * pStr, char * pIp){ unsigned int TmpNum[4] = {0}; if (CSUDI_NULL == pStr || CSUDI_NULL == pIp) { re
在考虑大小端时拷贝数据 大端模式 所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 小端模式 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。/* * Transform the message X which consis
二进制数字符串转化为二进制数 如何将一个二进制形式的数字字符串(如“10101010”)转化成二进制的数据类型(以char型为例)?答:想到移位的方法。char s[] = "10101011"char s8 = 0;for(i = 0;i < 8; i++){ if(s[i] == '1') { s8 |= (1 << i); }}
采用选择排序法对链表进行排序,注意交换操作中不是对链表里某一节点里的某一元素进行交换,而是对两节点指针的交换 /*结构体定义*/struct stu{ int StuID;// char name[10];// int sex;// int years;// struct stu *next; }; /**************************************************************** Function Name
kthread_run()和kthread_stop()函数 1 使用kthread_create创建线程: struct task_struct *kthread_create(int (*threadfn)(void *data), void *data, const char *namefmt, ...);这个函数可以像printk一样传入某种格式
如何导出内核模块符号以及如何引用导出的符号 以下是file1.c文件:#include#includeMODULE_LICENSE("Dual BSD/GPL");int add_integar(int a, int b){ return a+b;}int sub_integar(int a, int b){ return a-b;}/*导出符号*/EXPORT_SYMBOL(add_integar);EXPORT_
浅析container_of(ptr, type, member) 浅析container_of(ptr, type, member)#define container_of(ptr, type, member) ({ / const typeof( ((type *)0)->member ) *__mptr = (ptr); / (type *)( (ch
GCC编译关键字“__attribute__” 让GCC编译关键字“__attribute__”给你带来方便 直接引入我们的主角(粗体部分): int my_printf (void *my_object, const char *my_format, ...) __attribute__ ((format (printf, 2, 3))); my_printf是一个你自己写的函数,比如可能是对vsnprintf等函数进行