![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
文章平均质量分 86
notepad--
这个作者很懒,什么都没留下…
展开
-
彻底搞懂:字符编码、文本编码、u8、中文乱码、QT乱码问题
本文是作者自己体会和原创,限于水平有限,如有错误,还请赐教。开篇一个带入问题:比如如下两个:char * first ="中国你好";char * second=u8"中国你好";这两种写法到底有啥区别?网友回答:GCC/Clang 控制字符串编码有两个开关,是 -finput-charset 和 -fexec-charset , 分别控制源代码读入编译器时的源文件的编码,以及编译器生成目标文件时普通字面量的(const) char[] 类型数组里面的编码。VC 编译器(VS20原创 2022-05-12 12:28:38 · 3896 阅读 · 0 评论 -
linux 工作队列上睡眠的认识--不要在默认共享队列上睡眠
最近项目组做xen底层,我已经被完爆无数遍了,关键在于对内核、驱动这块不熟悉,导致分析xen代码非常吃力。于是准备细细的将 几本 linux 书籍慢慢啃啃。正好看到LINUX内核设计与实现,对于内核中中断下半段该如何选择?大牛的原话是这样的:“从根本上来说,你有休眠的需要吗?要是有,工作队列就是你的唯一选择,否则最好用tasklet。……”书中一直强调 工作队列是可以休眠的原创 2013-10-27 23:23:37 · 1996 阅读 · 1 评论 -
linux 内核中ip字符串与整数相互转换 手动实现inet_aton 与inet_ntoa 的功能
最近在从ip 数据包中获取源IP时,由于源IP是一个unsigned int的32位整数,而且内核中无法调用inet_aton函数,所以需要自己编程,将ip字符串转换成32位的整数。 初步想想,写出一个原型:unsigned int ip_str_to_num(const char *buf){ unsigned int tmpip[4] = {0};原创 2014-01-22 18:18:38 · 6138 阅读 · 0 评论 -
在linux 内核中做开关变量的三种方法—— 利用proc 、sys文件系统,字符设备等与内核进行交互
在linux内核中经常会遇到这样的问题:需要在内核或者驱动中做一个开关变量,通过在用户态控制开关变量的值,从而让内核识别并处理不同的工作。常见的情况是,需要做一个日志开关,用户可以控制内核是否打印出需要的日志。本文将介绍三种不同的方法,在内核中做开关变量。 在 阐述之前,我们假定用户通过cat和 echo 命令进行开关变量的读写。比如用户态开关文件位于 /home/value 。通过原创 2014-01-14 21:11:24 · 3022 阅读 · 1 评论 -
简单彻底搞懂内核 container_of 宏的用法
在linux 内核编程中,经常会遇到 container_of 宏的用法,该宏的作用到底是什么,如下图所示: 如上图所示,father 结构中包含另外一个结构 child c2 , 图中B的地址就是指向father.c2的首地址,即 B = & father.c2 ;A的地址就是指向father变量的首地址,即 A = &father 。在得知B地址的情况下,如果得到A的地址呢,原创 2014-01-16 21:28:03 · 1054 阅读 · 2 评论 -
用lex分析C源码中数据结构关系拓扑图
程序=数据结构+算法。最近在看ovs源码时,被其中c源码里面数据结构之间复杂的关系搞的晕头转向,所以强烈想自己写个工具来解析代码内数据结构之间的拓扑。本来想找个现成工具来的,一直没有找到好用的工具,于是产生自己来写的想法。本文记录下该想法实现的思路及详细过程。步骤如下:1)用lex解析出C源码里面的struct体到文件,包括用lex去掉注释并匹配struct结构体的过程。2原创 2017-07-06 23:14:22 · 2326 阅读 · 3 评论