摘要:
代码记录一下:1public static DataTable getByName(string typeName)2 {3 StringBuilder sb = new StringBuilder();4 sb.Append("select * from type1 where typeName like @typeName");5 OleDbParameter[] param = 6 {7 OleDbHelper.GetParameter("@typeName",OleDbType.VarChar,50,"[typeName]", 阅读全文
摘要:
这里的数据使用的是标准的can设备产生的can信号(扩展帧发送数据ID=0x11121181 Data=0x06 0x08)信号的波形如图1所示,这里示波器的探头接的是CAN_H,探头的夹子接的是CAN_L: 图1 示波器显示波形首先根据本博客中前面写的一篇如何测量can总线波特率获取总线的波特率,然后依据波特率和上面的波形读出具体的数据从上面的波形中读取到的数据是10111011101100011110111001111101011111001111101001111100111101111011011101根据标准can2.0b协议可以讲该字符串解析出来,标准的扩展协议如图2所示 图2 c 阅读全文
摘要:
ngx_buf.{c|h}分为两种类型,一种是file,一种是memory。因此这里会有文件的一些操作域。typedef void * ngx_buf_tag_t; typedef struct ngx_buf_s ngx_buf_t; struct ngx_buf_s { u_char *pos; //已经执行的数据位置 u_char *last; //使用的内存的最后一个字节的指针 off_t file_pos; ... 阅读全文
摘要:
ngx_list.{c|h}结构非常简单,如果你看过之前的array介绍,这一节可以一带而过:typedef struct ngx_list_part_s ngx_list_part_t;
struct ngx_list_part_s { void *elts; //数据区域指针 ngx_uint_t nelts; //数据实际个数 ngx_list_part_t *next; //下一个数据指针
};
typedef struct { ngx_list_pa... 阅读全文
摘要:
ngx_hash.{c|h}实现了nginx里面比较重要的一个hash结构,这个在模块配置解析里经常被用到。该hash结构是只读的,仅在初始创建时可以给出保存在其中的key-val对儿,然后就只能进行“增删改查”操作了。先来看一下hash结构的内存布局:typedef struct { ngx_hash_t *hash; //指向待初始化的散列结构 ngx_hash_key_pt key; //为计算散列值用的函数指针 ngx_uint_t max_size; ... 阅读全文
摘要:
src/core/ngx_queue.{c|h}实现了一个队列的操作逻辑,队列的基本结构为一个双向队列基础数据结构为:typedef struct ngx_queue_s ngx_queue_t; struct ngx_queue_s { ngx_queue_t *prev; ngx_queue_t *next;
};
根据数据结构可以发现,nginx的队列操作和结构只进行指针操作,不负责节点内容空间的分配和保存,所以在定义自己的队列节点的时候,需要自己定义数据结构以及分配空间,并包含一个ngx_queue_t类型的成员,需要获得原始的数据节点的时候,需要使用ngx_q... 阅读全文
摘要:
对应文件为core/ngx_array.{c|h}ngx_array是nginx内部封装的,使用ngx_pool_t对内存池进行分配的数组容器,其中的数据是在一整片内存区中连续存放的。更新数据时只能在尾部压入1个或多个元素。这里单纯的觉得和数组没有差别。数组的实现结构为:struct ngx_array_s { void *elts; //具体的数据区域的指针 ngx_uint_t nelts; //数组实际包含的元素数量 size_t size; //数组单个元素的大小 ngx_uint_t nalloc; ... 阅读全文
摘要:
内存分配相关1.系统功能封装内存相关的操作主要在os/unix/ngx_alloc.{h,c} 和 core/ngx_palloc.{h,c}中。其中os/unix/ngx_alloc.{h,c}封装了最基本的内存分配函数,是对c原有的malloc/free/memalign等函数的封装,对应函数为:a.ngx_alloc:对malloc进行了简单的封装;void *
ngx_alloc(size_t size, ngx_log_t *log)
{ void *p; p = malloc(size); if (p == NULL) { ngx_log_... 阅读全文
摘要:
简单的数据类型在core/ngx_confing.h中定义了基本的数据类型的映射,大部分都映射到c语言自身的数据类型:typedef intptr_t ngx_int_t;typedef uintptr_t ngx_uint_t;typedef intptr_t ngx_flag_t;其中ngx_int_t,ngx_flag_t都映射为intptr_t;ngx_uint_t映射为uintptr_t。这两个类型在/usr/include/stdint.h的定义为:/* Types for `void *' pointers. */
#if __WORDSIZE == 64
# ifnde 阅读全文
摘要:
我们之前说过模块的上下文分别对应四种结构体分别是ngx_core_module_t、ngx_event_module_t、ngx_http_module_t、ngx_mail_module_t分别对应四类模块src/core/ngx_conf_file.h
typedef struct { ngx_str_t name; void *(*create_conf)(ngx_cycle_t *cycle); char *(*init_conf)(ngx_cycle_t *cycle, void ... 阅读全文