2017年11月10日定义 首先看一下它的定义: 1 INTERVAL(N,N1,N2,N3,..........) INTERVAL() 函数进行比较列表(N1,N2,N3等等)中的N值。该函数如果N<N1返回0,如果N<N2返回1,如果N<N3返回2 等等。如果N为NULL,它将返回-1。列表值必须是N1<N2<N3的形式才能正常工作。 下面的代码是显示 INTERVAL() 函数如何工作的一个简单……
阅读全文
2017年10月12日Go 中的 for 循环可以使用 continue, break 进行控制,同时也可以标签 下面看一下使用标签的一个好处 示例:Go 求 N 以内的素数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package main import ( "fmt" ) func main() { printPrime(10) } func printPrime(maxNum int) { next: for outer := 2; outer < maxNum; outer++ { for inner := 2; inner < outer; inner++ { if outer%inner == 0 { continue next } } fmt.Printf("%d\n", outer) } fmt.Println("Completed") } 再看一下用C语言实现的(C 的 continue, break 不支持标签) 1 2 3 4 5 6 7 8……
阅读全文
2017年7月10日1.简单的宏实现 1 2 #define max(a,b) (((a) > (b)) ? (a) : (b)) #define min(a,b) (((a) < (b)) ? (a) : (b)) 2.内核的宏实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 /* safe min & max */ /* avoid ++/-- expand twice */ /* compile warning if type diff */ #define min(x, y) ({ \ typeof(x) _min1 = (x); \ typeof(y) _min2 = (y); \ (void) (&_min1 == &_min2); \ _min1 < _min2 ? _min1 : _min2; }) #define max(x, y) ({ \ typeof(x) _max1 = (x); \ typeof(y) _max2 = (y); \ (void) (&_max1 == &_max2); \ _max1 > _max2 ? _max1 : _max2; }) Linux 内核的实现是安全的,避免了 ++/– 计算多次,而且会在编……
阅读全文
2017年2月10日1.函数原型 1 2 int **pthread_create**(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); 本文主要讨论最后一个参数,同时传递多个的问题 (如果只传递一个 int char 等长度小于指针的数据类型,可以直接传,然后在线程内把 (void *) 强制转换) 2.错误示例 是在一本书上看到的,也是写本文的初衷 错误原因: fds_for_new_worker 是局部变量,线程创建异步的,pthread_create 后, else if 也结束……
阅读全文
2016年2月29日1.下载 tftpd32 工具 下载 http://download.csdn.net/detail/chinaeran/9445298(tftpd32_v4.5.2绿色版.zip) 2.解压运行 3.DHCP服务器配置 例如分配10段的网络 4.tftp服务器配置 设置好路径和ip即可……
阅读全文
2015年11月14日概览 SecureCRT 安装好后,白底黑字,不透明,ls 没颜色,看起来相当不爽 先看下配置好后的效果吧 :-) 1.设置终端主题,黑底白字 选全局配置 默认会话 颜色主题和字符编码 保存 2.设置字符颜色和终端类型 选择 Linux,勾选 ANSI Color 3.设置透明效果 数值越小越透明……
阅读全文
2015年9月19日概览 平时经常会查看16进制文件,有用 UltraEdit、NotePad++ 的,但是一直使用 MadEdit,简单、轻快、绿色,用起来很爽,所以才会有这篇文章。 我使用的是 MadEdit-Mod (MadEidt 的作者好像是国人,已经不更新了,MadEdit-Mod 修复了一些 bug,添加了一些新的功能), 下载地址:https:……
阅读全文
2015年7月1日概览 使用 fork 后,可能需要获取 fork 的进程的运行状况,比如有没有异常、崩溃。 wait 在 man 中关键的描述如下: All of these system calls are used to wait for state changes in a child of the calling process, and obtain information about the child whose state has changed. A state change is considered to be: the child terminated; the child was stopped by a signal; or the child was resumed by a signal. 示例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46……
阅读全文
2015年4月28日注: 如果想要按照本篇实践,需要有能运行的arm开发板和对应版本的内核(如果想在Linux主机上编译运行,请参考附1) 1.在相应版本内核的driver目录下新建如下文件 其中文件代码如下: /* hello.c */ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <linux/init.h>#include <linux/module.h> static int hello_init(void) { printk(KERN_INFO "[init] Can you feel me?\n"); return 0; } static void hello_exit(void) { printk(KERN_INFO "[exit] Yes.\n"); } module_init(hello_init); module_exit(hello_exit); MODULE_AUTHOR("Alan Wang <alan@wrcode.com>"); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("A simple Hello……
阅读全文
2015年4月8日上一次多看阅读时长到100小时是14年的10月份,现在到了200小时了,因为我读书有个非常不好的习惯,遇到喜欢的书,一般会很快读完,导致很容易忘记都读过什么书和其中的内容,因此记录一下,也希望自己以后能读的慢一些。 有人说(有人是谁?),对于一本好书,读完是第一步,思考是第二步,实践是第三步,这三步都……
阅读全文