自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (2)
  • 收藏
  • 关注

转载 设备驱动绑定和解绑

Manual driver binding and unbinding

2017-03-01 09:38:19 1314

转载 恢复Linux下被删除的文件

恢复Linux下被删除的文件

2017-02-07 09:36:36 2332

原创 用户态多线程环境下IO端口权限问题

Linux下用户态读写io port需要先使用ioperm或iopl获取io port权限,ioperm和iopl的手册都只是描述了fork 子进程时端口权限继承问题,但是都没有对一个进程中的多个线程间port权限的共享问题作出说明。笔者在多线程环境下读写io port的时候就碰到了一个诡异的问题:程序有概率地崩溃在outb上,程序内部有一个工作线程池,线程池中的每个线程和进程主线程都可能读写

2016-12-30 14:47:50 670

原创 libuuid.so 崩溃问题

前段时间使用的Cetos 6.3有程序崩溃在了uuid_generate () from /lib/libuuid.so.1,现象很是诡异,libuuid是Centos util-linux工具包中自带的一个系统库,怎么可能在这里出问题。首先怀疑是上层应用不正确的使用libuuid库导致的问题,对应用代码进行review和debug也没有发现问题。最为奇怪的,这个问题在使用官方ISO镜像安装的Ce

2016-10-17 14:24:18 3355

原创 使用setvbuf更改printf的默认buffer 行为

setvuf printf stdout stderr fprintf 缓冲行为

2016-08-12 23:28:42 5016 1

原创 linux文件权限

linux 下有2中文件权限表示方式,即“符号表示”和“八进制表示”。(1)符号表示方式:-         ---             ---            ---type   owner       group      others如ls -l 所显示的,-rwxr-xr-x 1 root root 6483 May 15 21:24 a.out-rw-r

2016-05-15 21:58:22 597

原创 hdu-3786-找出直系亲属

Problem Description如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A,B的grandchild,如果A,B是C的(外)曾祖父,曾祖母,则A,B是C的great-grandparent,C是A,B的great-grandchild,之后再多一辈,则在关系上加一个great-

2016-05-02 00:22:23 499

原创 hdu-1251-统计难题

Problem DescriptionIgnatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).Input输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串

2016-05-02 00:15:39 412

原创 LeetCode-3-Longest Substring Without Repeating Characters

时间复杂度O(n^2)#include #include using namespace std;class Solution {public:    int lengthOfLongestSubstring(string s) {        size_t found;        int max_len = s.empty() ? 0 : 1;

2016-05-01 22:53:43 269

原创 VIM 移动命令总结备忘

{ 跳转到上一个段落(空行)} 跳转到下一个段落(空行)[{ 跳转到上一个位于第一列的'{']}% : 匹配括号移动,包括 (, {, [. (需要把光标先移到括号上)^ g_0 $b w B WMove back by token/forward by token/back by word/forward by

2016-04-29 15:28:04 280

转载 eventfd - create a file descriptor for event notification

NAME         top eventfd - create a file descriptor for event notificationSYNOPSIS         top #include int eventfd(unsigned int initval, int flags);DESCRIPTION

2016-04-28 10:20:30 623

原创 C&C++中volatile使用场景

考虑这样一种场景:2个线程共同访问一个全局变量,一个线程只读取它,一个线程只修改它,是否需要对该全局变量加volatile修饰符?    根据wikipedia的解释wiki/Volatile_(computer_programming)和笔者做的实验,结论是:不需要。

2016-04-26 16:58:32 1702

原创 wireshark 解析器开发

wireshark支持2种形式的解析器,内建的解析器(built-in dissector)和插件解析器(plugin dissector)。内建的解析器随wireshark一起发布,而插件解析器可以将生成的.dll(windows)或.so(linux)直接放到wireshark的plugins目录下即可使用。    内建的解析器必须用C语言来写,而插件解析器可以用C语言或lua脚本来写

2016-04-26 15:27:20 1098

原创 GCC 内建函数

__builtin_*形式的gcc内建函数一般是基于不同硬件平台采用专门的硬件指令实现的,因此性能较高。如int __builtin_popcount (unsigned int x)Returns the number of 1-bits in x.int __builtin_popcountl (unsigned long)Similar to __builtin_popc

2016-04-13 23:52:02 3065

原创 /sys/block/xxx/queue/中的max_hw_sectors_kb 和 max_sectors_kb

在一次调试快照驱动的时候,打印bio时发现max_sectors_kb会影响一个bio的最大大小。max_hw_sectors_kb:单个数据传输中硬件(如磁盘)最大支持多少KB的数据。max_sectors_kb: 一次请求中block 层最大支持多少KB数据,以一块sata磁盘为例:cat /sys/block/sda/queue/max_sectors_kb512

2016-03-21 13:58:08 7316 1

原创 磁盘槽位和盘符绑定方案

磁盘槽位和盘符绑定方案 sd_probe index host_no

2015-12-11 14:18:20 5662 2

原创 释放某个文件的cache

之前在嵌入式设备上做视频备份,将自主开发的用户文件系统中视频数据备份成ASF文件。由于涉及file io,遇到的一个问题是Linux会cache住那些asf文件,造成free内存减少。虽然这没有什么,但是为了稳定性考虑,我们的系统在free内存少于一个阈值时会告警。当时采取的方式是,每备份一部分数据通过echo 3 > /proc/sys/vm/drop_caches来释放cache。现在想想

2015-12-07 16:11:46 606

原创 动态调试pr_debug

最近在看overlay fs代码时发现里面有些函数里使用pr_debug加了一些打印信息。那么如何打开这个打印信息呢?首先查看pr_debug的定义:#if defined(CONFIG_DYNAMIC_DEBUG)/* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */#define pr_d

2015-11-23 14:17:23 5499

原创 SELINUX 导致rsync无法同步文件

问题描述:写了一个脚本update.sh调用rsync同步更新服务器上的文件,将update.sh加入Linux 自启动脚本/etc/rc.local由系统自动拉起后,rsync会无缘无故的失败,在终端手动运行update.sh就可以正常同步文件。原因:查看/var/log/messages发现是SELINUX限制了rsync的执行。解决办法:使用ls -Z 查

2015-09-11 10:40:07 2411 1

原创 分析命令行选项的方法

1 getopt系列,getopt、getopt_long和getopt_long_only2 借助第三方工具,如gflags

2015-06-05 11:12:23 381

原创 人生的财富不只限于金钱

健康、帅气等等这些都是人生的财富,而且有很多东西如果失去了,即使有了再多的钱也可能无法挽回,比如健康的身体。所以,在追求物质的同时一定要好好注意身体的保养。

2015-06-05 08:54:24 615

原创 限制printk打印频率函数printk_ratelimit

在Linux内核代码里当需要限制printk打印频率时会用到printk_ratelimit或__ratelimit

2015-04-22 10:00:21 13570

原创 程序员如何保持身体健康

1 避免久坐2 工作之外尽量少用电脑

2015-03-12 09:11:22 587

原创 Intel硬件指令加速计算CRC32

纯软件实现CRC32经常是借助于查表实现的,当计算CRC32过于频繁时可通硬件指令优化以减少对CPU的占用。目前Intel支持的用于计算CRC的有CRC32和PCLMULQDQ两个指令。本文仅讨论使用CRC32指令的使用。CRC32指令计算的是iSCSI CRC,也就是生成多项式为0x11EDC6F41的32位CRC。使用CRC32指令的方式有2种:一种是直接使用(内联)汇编代码;另一种是借助

2015-02-11 13:29:35 11991

原创 常用的数据结构和算法

数据结构:1 链表参考linux kernel "list.h"2 ring buffer 参考linux kernel "kfifo.h"3 trie 树(也叫字典树)4 hash、bloomfilter 参考leveldb "bloom.cc"5 skiplist、红黑树、B树红黑树参考linux kernel "rbtree.h/rbtree.c"

2015-01-14 11:25:45 416

原创 我所理解的“读书百遍,其义自现”

小时候背诵名言佳句的时候早就知道“读书百遍,其义自现”这句话,意思大概是,把书多读几遍其中的含义自然理解了。初中、高中,甚至大学的时候,好像从来没有对这句话有过什么感觉,毕业后工作了3年才慢慢开始对这句话有了些许的感触。在自己看内核代码或一些比较新的技术文章的时候,碰到相对复杂、涉及到太多新知识和概念的时候,第一遍甚至第二遍看的时候基本上感觉只是知道有这么个东西,至于这个东西和其他知识的串联还有这

2015-01-03 23:28:24 1184

原创 Gcc Inline 函数

1.      编译时使用–Winline,让gcc对标志成inline但不能被展开的函数给出警告信息。2.      Inline是一种优化,只在有优化的编译选项中起作用,若编译时没使用-O选项,任何函数都不会被内联。3.      Inline 不能被展开的常见情况(1)    使用了可变参数;(2)    非局部goto语句;(3)    对inline函数地址的引用,递

2014-12-17 12:39:38 1024

原创 查看内核缓存TCP/UDP数据占用的内存大小

可通过/proc/net/sockstat查看cat /proc/net/sockstatsockets: used 159TCP: inuse 49 orphan 0 tw 2 alloc 61 mem 487UDP: inuse 0 mem 0UDPLITE: inuse 0RAW: inuse 0FRAG: inuse 0 memory 0

2014-12-11 15:22:06 4077

原创 GDB总结

1,core dump 文件生成于其他机器上

2014-11-08 15:10:18 817

原创 带宽时延积、TCP 滑动窗口和拥塞窗口

带宽时延积(BDP),带宽 * RTT

2014-09-29 13:21:22 3211

原创 快速预分配磁盘空间

fallocate(posix)与lseek, truncate空洞文件区别

2014-09-02 12:38:08 5557

原创 编译时断言

运行时断言大家都用过,但如果想当某个条件不满足时在编译时就让程序编译不通过,即编译时断言是什么样子的呢。可参考如下:/* Force a compilation error if condition is true */#ifdef WIN32    #define BUILD_BUG_ON(e)  {typedef char __static_assert_t[!(e)]

2014-04-26 13:59:55 1263

原创 大数问题 hdu 1002

大数问题通常用数组来模拟计算。下面给出hdu 1002 的代码。 #include #include #include #define MAX_LEN 1000int g_a[MAX_LEN];int g_b[MAX_LEN];int g_ans[MAX_LEN];char g_stra[MAX_LEN + 1];char g_strb[MAX_LEN +

2014-04-20 00:30:23 519

原创 最长递增子序列LIS算法

DP O(n2)的算法是比较容易想到的,但用时间复杂度为O(n2)的方法解 poj 3903 Stock Exchange 问题时 tle。故需要更快的算法,下面介绍一个O(nlogn)的DP +二分查找的算法。p[i]521453d[i]111232引入数组s,s[i] 表示处在长度为

2014-04-20 00:28:31 625

原创 插入相同“键值”key时Linux 内核中红黑树的使用

Linux 内核中提供了一个通用红黑树的实现(位于文件rbtree.h和rbtree.c),在日常的项目开发中,很多人也是直接将其代码取出来,然后自己“包装”一下就使用了。   近期的使用中我有了一个这样的疑问,就是如果插入相同的key,是不是这个红黑树还能正常使用?这样做会不会破坏这个红黑树的结构?当然我们知道C++ STL中的multimap(multimap也是基于red-black

2014-04-20 00:25:57 4907 1

原创 字节对齐

有效对齐值 = min(结构自身对齐值, 指定对齐值)。1. 结构自身对齐值:(1)基本数据类型:char --1, short -- 2, int --4;(2) 结构体或类:所有成员自身对齐值中的最大值;2. 指定对齐值#pragma pack(value) ,另linux下还可用__attribute__() 来指定。原因:在让每个成员在一次内存访问中被读取或写入

2014-04-20 00:23:04 528

转载 linux打印函数调用堆栈

以下内容引自http://www.kernel.org/doc/man-pages/online/pages/man3/backtrace.3.html 作备忘之用。NAME         top backtrace, backtrace_symbols, backtrace_symbols_fd - support for application s

2014-04-20 00:20:37 890

转载 linux /proc/buddyinfo 解读

The Linux kernel doesn't consider all of your physical RAM to be one great big undifferentiated pool of memory. Instead, it divides it up into a number of different memory regions (at least for kernel

2014-04-20 00:18:33 2838

原创 linux kernel 2.6.10 编译

之前看《linux device drivers》的时候用的是2.6.18的内核,最后发现与驱动有关的内容内核中还真变了不少。 为了更好地学习linux 驱动,决定编译一下linux 2.6.10,毕竟那本书就是以这个版本为基础的。用2.6.18的redhat 5.0编译的时候,可能因为编译器版本的问题,出了很多问题,在网上找了很多资料,打补丁、改源文件什么的,总算编译成功,但在最后启动新的内

2014-04-20 00:15:09 1856

原创 元素选择问题

问题描述:从n个元素中选择第k小的元素。此问题存在最坏情况下时间复杂度为O(n)的算法,但本文不作讨论本文介绍一种使用“快速排序”算法的思想求解此问题的方法,平均时间复杂度O(nlogn) 。“快速排序算法”的实质是“递归与分治”,以序列中a[l:r]的某个元素a[i]为基准,将序列分成3部分:a[l:i-1],a[i]和a[i+1,r],使之满足a[l:i-1]中的元素都小于a[i]

2014-04-20 00:13:04 764

test-tls.tar.gz

glibc 对tls 支持bug的复现代码。

2016-10-17

source navigator 6.0

与windows下source insight 对应;source navigator是linux下阅读源代码的方便力器。编译安装步骤: 1. tar 解压 2. 进入文件夹./configure 3. make 4. make install 5. snavigator 运行

2013-02-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除