Keep Learning

伪程序员记录点滴

正则表达式学习

不同程序中的regex的使用

grep

表达式 含义
-E 扩展正则表达式
-G 基本正则表达式
-P perl基本表达式
-o 仅仅输出匹配结果
-v 进行求非操作
-c 计算匹配的总数

perl

表达式 含义
m/pattern/ 搜索
s/pattern/pattern/ 替换
qr/pattern/ 返回一个regex对象供以后使用
split() 把一个字符串拆分成子字符串
\i 不区分大小写
\g 全局搜索
$’ 匹配前面的所有东西
$` 匹配之后的所有东西
$& 整个匹配的字符串

Gdb 学习

GBD指令

backtrace 在程序出现错误之后,使用它可以看出出错的函数被哪个函数所调用。

查看内存地址存放的值

1
x 内存地址(examine)

查看代码。

1
list
如list 1,90用来查看1到90行的代码。

Debian安装记录

添加用户至sudo用户组并去除密码

visudo修改为不需要密码,将

%sudo ALL=(ALL):ALL
修改为 %sudo ALL=(ALL) NOPASSWD: ALL
将用户user_name添加至sudo用户组

1
adduser user_name sudo

重新登录后,user_name用户即已经位于sudo用户组中。

VIM使用便签

转载自vim_cook_book

字符翻转

1
xp

可交换的替换单词

1
2
3
4
5
1G              #到第一行
/idiot<enter>   #搜索单词idiot
cwmanager       #将idiot替换为manager
n               #搜索下一个idiot
.               #重复上面的替换操作
1
%s/\<idiot\>/manager/gc #直接在命令行模式下进行输入,使用全局替换的方式

/\<idiot\>/

This text specifies the text we are looking for wand want. The < tells Vim to match a word start and the > tells Vim to match the end of a word.
\<表明匹配的是一个单词的开始,\>表明匹配的是一个单词的结束。

Linux定时器

1
int mod_timer(struct timer_list *timerunsigned long expires)

该函数负责修改内核定时器timer的超时字段expires。该函数可以修改激活和没有激活的内核定时器的超时时间,并把它们都设置为激活状态;返回值为0表示修改的内核定时器在修改之前处于未激活状态,返回值为1表示修改的内核定时器在修改之前处于已激活状态。

Linux内核TCP/IP笔记

内核其他模块和用户空间应用程序可能都想知道网络设备注册、注销、打开、关闭的时间,因此提供了两个产生事件通知的途径,即netdev_chain通知链和netlinkRTMGRP_LINK组播组。

取整操作

问题

A,B都是整数并且 A>1, B>1,求 ┌ A/B ┐ 即 A/B 的上取整。

当A/B 整除,往上取整返回值 为 A/B。

当不整除,返回值是 int(A/B) + 1

这个算法的一个应用:如果你有一个动态增长的缓冲区,增长的步长是 B,某一次缓冲区申请的大小是 A,这个时候,就可以用这个算法,计算出缓冲区的一个合适大小了,正好可以容纳A,并且不会过于得多,多余部分不会比B多。

IEEE 802.15.4格式

IEEE 802.15.4 MAC帧控制字段中帧类型的数值
信标帧:000
数据帧:001
确认帧:010
命令帧:011