- 【学习笔记】【内核】container_of 的用法
踏流星
学习笔记
根据结构体变量成员的指针获取整个结构体的指针#include2#include"stdlib.h"#include"string.h"#defineoffsetof(TYPE,MEMBER)((size_t)&((TYPE*)0)->MEMBER)#definecontainer_of(ptr,type,member)({\consttypeof(((type*)0)->member)*__mpt
- Linux内核中container_of宏的详细解释
嵌入式与Linux那些事
Linux内核LinuxLinux内核嵌入式软件开发C语言驱动开发
上一节拒绝造轮子!如何移植并使用Linux内核的通用链表(附完整代码实现)我们在分析Linux内核链表的时候注意到内核在求解结构体偏移的时候巧妙的使用了container_of宏定义,今天我们来详细剖析下内核到底是如何求解结构体成员变量的地址的。文章目录结构体在内存中是如何存储的container_of宏typeof(((type*)0)->member)consttypeof(((type*)0
- 嵌入式Linux_驱动开发:offset宏和container_of宏
Mr_WangAndy
嵌入式Linux_驱动开发驱动开发C语言offsetof宏container_of宏
今天学习了两个Linux内核中两个宏定义,下面逐步分析宏的作用。1.获取结构体元素的偏移量:offsetof宏#defineoffsetof(TYPE,MEMBER)((int)&((TYPE*)0)->MEMBER)第一步:0地址转为(TYPE*)0这是一个强制类型转换,把0地址强制类型转换成一个TYPE指针,这个指针指向一个TYPE类型的结构体变量。(实际上这个结构体变量可能不存在,但是只要我
- linux container 作用,linux container_of 宏作用
范奕信
linuxcontainer作用
在学习Linux驱动的过程中,遇到一个宏叫做container_of。该宏定义在include/linux/kernel.h中,首先来贴出它的代码:/***container_of-castamemberofastructureouttothecontainingstructure*@ptr:thepointertothemember.*@type:thetypeofthecontainerstr
- 【Linux】container_of宏
PannLZ
Linux系统之路linux驱动开发运维c语言
博客主页:PannLZ系列专栏:《Linux系统之路》不要让自己再留有遗憾,加油吧!container_of宏假设有一个structperson,其定义如下:structperson{intage;char*name;}p;只用age或name上的指针就可以检索包装(包含)该指针的整个结构。顾名思义,container_of宏用于查找指定结构字段的容器。该宏在include/linux/kerne
- linux驱动开发之常见面试问题
墨染 锦年
Linux内核驱动C语言学习linux驱动开发面试
linux驱动开发之常见面试问题新增驱动的基本操作寄存器基址怎么映射?probe里的常规操作。驱动中通常会定义一个私有结构体,里面包含一些内核结构体,但注册的时候只注册了某个成员,怎么找到这个私有结构体。什么是container_of如何给应用层提供接口什么是ioctl?如何在shell下调用驱动如何解决内核启动时卡死问题简述MMU的工作原理新增驱动的基本操作先在设备树里新建一个节点,填写comp
- Linux设备驱动开发学习笔记(等待队列,锁,字符驱动程序,设备树,i2C...)
【linux嵌入式】玩家
LInux嵌入式linux驱动开发学习嵌入式硬件嵌入式软件android
1.内核工具和辅助函数1.1宏container_ofcontainer_of函数可以通过结构体的成员变量检索出整个结构体函数原型:/*pointer指向结构体字段的指针container_type结构体类型container_field结构体字段名称返回值是一个指针*/container_of(pointer,container_type,container_field);structmcp23
- 结构体的几个知识点
HUI的技术笔记
c++
如何记住container_of的用法记住container_of的一个方法是将其视为一个宏,它接受三个参数:指向成员变量的指针、结构体类型和成员变量的名称。例如:#definecontainer_of(ptr,type,member)\((type*)((char*)(ptr)-offsetof(type,member)))这个宏的作用是返回包含给定成员变量的结构体的指针。要使用它,您需要提供一
- 【linux】工作队列简单示例
Yengi
testlinux运维服务器
#include#include#include#includestructwork_data{structwork_struct_work;intdata;};staticstructwork_datamy_work_struct;staticvoidwork_handler(structwork_struct*work){structwork_data*wdata=container_of(w
- 【Linux API 揭秘】container_of函数详解
dong__ge
LinuxAPI接口详解linuxLinux驱动开发Linux内核开发LinuxAPIiot
我的圈子:高级工程师聚集地我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强企业!创作理念:专注分享高质量嵌入式文章,让大家读有所得!文章目录1、container_of函数介绍2、container_of函数实现2.1static_assert2.2__same_type2.3(type*)02.4offsetof2.5container_of3、总
- linux驱动开发中常用函数--container_of的用法及分析
lagransun
Linux驱动开发常用函数linux驱动开发运维
版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/xi_xix_i/article/details/134625972目录1.开发环境2.container_of用法简介3.container_of详解4.container_of测试1.开发环境linux4.192.container_of用法简介
- 嵌入式C语言自我修养 (04):Linux 内核第一宏:container_of
宅学部落-王利涛
嵌入式C语言自我修养嵌入式C视频教程LinuxGNUC语法C语言教程
4.1typeof关键字ANSIC定义了sizeof关键字,用来获取一个变量或数据类型在内存中所占的存储字节数。GNUC扩展了一个关键字typeof,用来获取一个变量或表达式的类型。这里使用关键字可能不太合适,因为毕竟typeof还没有被写入C标准,是GCC扩展的一个关键字。为了方便,我们就姑且称之为关键字吧。通过使用typeof,我们可以获取一个变量或表达式的类型。所以typeof的参数有两种形
- 搞懂它,就可以把结构体玩活了~
最后一个bug
算法
正文大家周末好,我是bug菌~今天主要是跟大家详细聊聊container_of这个宏定义,非常经典的宏,只是一直没有抽时间细细品味,今天就跟大家一起来看看有何神奇之处:1offsetof首先我们需要简单看看offsetof(TYPE,MEMBER)这个宏定义,它是用于计算一个结构体中某个成员的偏移量。其第一个参数TYPE是一个结构体类型,第二个参数MEMBER是TYPE中的一个成员变量名。它将返回
- container_of解析及应用
weymin
优雅C语言系列c语言kernellinuxzephyr
container_of是一个C语言中比较少见,但实际经常用到的宏,在Linuxkernel中也有大范围的应用。
- 根据结构体成员变量的地址得出结构体的首地址(offsetof、container_of)
思识己
LinuxC语言指针linux驱动程序
关于offsetof()、container_of()函数详解一、前言二、offsetof()函数详解三、container_of()函数详解五、一个实例四、总结一、前言最近在看linux驱动时偶然间发现了这两个宏函数offsetof、container_of,刚开始看的时候一头雾水,后来网上找了些资料理解了下大概清楚了它的整个过程,下面我来解析一下#defineoffsetof(TYPE,MEM
- 嵌入式C语言自我修养《GNU C编译器扩展语法》学习笔记
ssz__
嵌入式工程师自我修养c语言学习笔记gnulinux
目录一、C语言标准和编译器二、指定初始化三、宏构造“利器”:语句表达式四、typeof与container_of宏五、零长度数组六、属性声明:section七、属性声明:aligned一、C语言标准和编译器C语言标准的发展过程:●K&RC.●ANSIC.●C99.●C11.二、指定初始化指定初始化结构体成员:和数组类似,在C语言标准中,初始化结构体变量也要按照固定的顺序,但在GNUC中我们可以通过
- linux内核中的offsetof、container_of、双链表list.h实践
dijkstar
linuxlist
先直接上程序,代码中包含了注释已经说清楚。在linux的应用层中编译、测试:感谢李慧芹的B站课程:史上最强最细腻的linux嵌入式C语言学习教程【李慧芹老师】_哔哩哔哩_bilibili#include#include//下面的宏来自于:#defineoffsetof(TYPE,MEMBER)((size_t)&((TYPE*)0)->MEMBER)#definecontainer_of(ptr,
- offsetof和container_of学习
云端之上___
#include#include//#include#defineoffsetof(TYPE,MEMBER)((size_t)&((TYPE*)0)->MEMBER)#definecontainer_of(PTR,TYPE,MEMBER)({\consttypeof(((TYPE*)0)->MEMBER)*__mptr=(PTR);\(TYPE*)((char*)__mptr-offsetof(T
- Linux container_of() 宏定义
_llc
linuxkernellinux运维服务器
container_of宏今天遇到了一段这样的代码,大致意思是通过该struct结构体变量的成员的地址来反推该struct结构体变量的地址并且用到了内核的宏,container_of()staticinlinestructnova_inode_info*NOVA_I(structinode*inode){returncontainer_of(inode,structnova_inode_info,
- 数组&字符串&结构体&共用体&枚举
小嵌同学
C语言高级专题系列arm单片机stm32物联网mcu
目录前言一、程序中内存从哪里来二、C语言的字符串类型三、字符串和字符数组的细节四、C语言之结构体四、offsetof宏与container_of宏五、共用体六、大小端模式七、枚举前言数组、字符串、结构体、共用体以及枚举是我们C语言学习中比较重要的几部分,通过这篇文章和大家一起来学习一下,并介绍一些笔试以及面试这部分知识的考点。一、程序中内存从哪里来1、程序执行需要内存支持对程序来说,内存就是程序的
- container_of函数用法
ebayboy
例二:它的作用显而易见,那就是根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针。比如,有一个结构体变量,其定义如下:structdemo_struct{type1member1;type2member2;type3member3;type4member4;};structdemo_structdemo;同时,在另一个地方,获得了变量demo中的某一个域成员变量的指针,比如:
- container_of c语言中根据结构体成员的指针获取整个结构体的指针
CW96
c语言
container_ofc语言中根据结构体成员的指针获取整个结构体的指针#definecontainer_of(ptr,type,member)({\consttypeof(((type*)0)->member)*__mptr=(ptr);\(type*)((char*)__mptr-offsetof(type,member));\})宏的参数解释:ptr:指向结构体成员的指针。type:结构体的
- 【linux内核】container_of
程序员之一
C语言linux内核编程linuxc语言
/***container_of-castamemberofastructureouttothecontainingstructure*@ptr:thepointertothemember.*@type:thetypeofthecontainerstructthisisembeddedin.*@member:thenameofthememberwithinthestruct.**/#definec
- container_of 根据成员变量获得包含其的对象的地址!
shenmingik
好用的函数好用的函数
写在前面本系列文章的灵感出处均是各个技术书籍的读后感,详细书籍信息见文章最后的参考文献CONTAINER_OF在书中发现一个很有意思的宏,以此可以衍生出来其很多的用法,这个宏可以根据某个成员变量的地址得到包含这个成员变量地址的对象的地址。但是,这个过程很危险,慎用哦!我们先看这个宏的一个依赖宏:OFFSET_OF,它可以方便的获取此成员变量在这个对象之中的偏移量。/**@briefOFFSET_O
- LINUX之container_of解析
Ho_pe
linux
1.container_of宏的定义及实现1>Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。2>接口:container_of(ptr,type,member)-->ptr:表示结构体中member的地址-->type:表示结构体类型-->member:表示结构体
- 【Linux内核链表】的原理及使用方式整理
浪矢杂谈
linux设备驱动开发算法与数据结构链表linux数据结构
本期主题:讲清Linux内核链表的使用方式,包括:双链表原理以及内核中双链表的使用方式解析内核常用宏(offset_of、container_of)的原理解析内核链表的使用方式(list_entry、list_for_each宏)往期链接:数据结构系列——先进先出队列queue数据结构系列——栈stack目录1.双链表定义2.内核双链表的差异3.内核常用宏(offsetof&container_o
- container_of()一个在内核中经常使用的宏
最后一个bug
arm开发linux数据结构算法嵌入式硬件
container_of()是一个在内核中经常使用的宏,用于获取一个结构体指针所在它所属的结构体的指针。宏的参数包括:ptr:结构体中某个成员的指针;type:结构体类型名称;member:结构体中ptr指向的成员名称。首先,宏container_of()确定了ptr指向的成员在结构体中的偏移(offset)。通过offsetof()宏就可以得到这个偏移,其参数为结构体类型和成员名称。得到偏移后,
- 内核中一些重要宏
柯基是只dog
阅读源码的过程中有大量使用到宏,所以作为开篇,其中有很多宏功能极其强大但也很晦涩难懂,本文不对宏思路做细致分析,因为网上基本上都能找得到,那么这篇应该算一个索引吧,只是为了本人记忆及查找方便container_of如果知道一个结构体中某个变量的指针,那么该宏就可以返回该变量对应的结构体指针#definecontainer_of(ptr,type,member)({\consttypeof(((ty
- linux 内核 container_of() 宏函数 原理详解
JEFF_张
container_of()宏函数源码:/***container_of-castamemberofastructureouttothecontainingstructure*@ptr:thepointertothemember.*@type:thetypeofthecontainerstructthisisembeddedin.*@member:thenameofthememberwithint
- 多态性在C++和Linux内核中的实现共性和区别
papaofdoudou
数学嵌入式系统c++linux开发语言
Linux内核是用C语言开发的,而C是面向结构,面向过程的语言,这种语言的特点是数据结构和数据操作是分离的两个部分,但是这并不代表面向过程的语言无法实现面向对象语言的一些机制,比如多态性,多态的本质在于其抽象的思维方法,而并非是其实现技巧。换句话说,用C语言也同样可以实现类似多态的机制。Linux内核中普遍使用了这种思想,比如container_of可以通过一个基类对象得到它的子类对象。而设备驱动
- springmvc 下 freemarker页面枚举的遍历输出
杨白白
enumfreemarker
spring mvc freemarker 中遍历枚举
1枚举类型有一个本地方法叫values(),这个方法可以直接返回枚举数组。所以可以利用这个遍历。
enum
public enum BooleanEnum {
TRUE(Boolean.TRUE, "是"), FALSE(Boolean.FALSE, "否");
- 实习简要总结
byalias
工作
来白虹不知不觉中已经一个多月了,因为项目还在需求分析及项目架构阶段,自己在这段
时间都是在学习相关技术知识,现在对这段时间的工作及学习情况做一个总结:
(1)工作技能方面
大体分为两个阶段,Java Web 基础阶段和Java EE阶段
1)Java Web阶段
在这个阶段,自己主要着重学习了 JSP, Servlet, JDBC, MySQL,这些知识的核心点都过
了一遍,也
- Quartz——DateIntervalTrigger触发器
eksliang
quartz
转载请出自出处:http://eksliang.iteye.com/blog/2208559 一.概述
simpleTrigger 内部实现机制是通过计算间隔时间来计算下次的执行时间,这就导致他有不适合调度的定时任务。例如我们想每天的 1:00AM 执行任务,如果使用 SimpleTrigger,间隔时间就是一天。注意这里就会有一个问题,即当有 misfired 的任务并且恢复执行时,该执行时间
- Unix快捷键
18289753290
unixUnix;快捷键;
复制,删除,粘贴:
dd:删除光标所在的行 &nbs
- 获取Android设备屏幕的相关参数
酷的飞上天空
android
包含屏幕的分辨率 以及 屏幕宽度的最大dp 高度最大dp
TextView text = (TextView)findViewById(R.id.text);
DisplayMetrics dm = new DisplayMetrics();
text.append("getResources().ge
- 要做物联网?先保护好你的数据
蓝儿唯美
数据
根据Beecham Research的说法,那些在行业中希望利用物联网的关键领域需要提供更好的安全性。
在Beecham的物联网安全威胁图谱上,展示了那些可能产生内外部攻击并且需要通过快速发展的物联网行业加以解决的关键领域。
Beecham Research的技术主管Jon Howes说:“之所以我们目前还没有看到与物联网相关的严重安全事件,是因为目前还没有在大型客户和企业应用中进行部署,也就
- Java取模(求余)运算
随便小屋
java
整数之间的取模求余运算很好求,但几乎没有遇到过对负数进行取模求余,直接看下面代码:
/**
*
* @author Logic
*
*/
public class Test {
public static void main(String[] args) {
// TODO A
- SQL注入介绍
aijuans
sql注入
二、SQL注入范例
这里我们根据用户登录页面
<form action="" > 用户名:<input type="text" name="username"><br/> 密 码:<input type="password" name="passwor
- 优雅代码风格
aoyouzi
代码
总结了几点关于优雅代码风格的描述:
代码简单:不隐藏设计者的意图,抽象干净利落,控制语句直截了当。
接口清晰:类型接口表现力直白,字面表达含义,API 相互呼应以增强可测试性。
依赖项少:依赖关系越少越好,依赖少证明内聚程度高,低耦合利于自动测试,便于重构。
没有重复:重复代码意味着某些概念或想法没有在代码中良好的体现,及时重构消除重复。
战术分层:代码分层清晰,隔离明确,
- 布尔数组
百合不是茶
java布尔数组
androi中提到了布尔数组;
布尔数组默认的是false, 并且只会打印false或者是true
布尔数组的例子; 根据字符数组创建布尔数组
char[] c = {'p','u','b','l','i','c'};
//根据字符数组的长度创建布尔数组的个数
boolean[] b = new bool
- web.xml之welcome-file-list、error-page
bijian1013
javaweb.xmlservleterror-page
welcome-file-list
1.定义:
<welcome-file-list>
<welcome-file>login.jsp</welcome>
</welcome-file-list>
2.作用:用来指定WEB应用首页名称。
error-page1.定义:
<error-page&g
- richfaces 4 fileUpload组件删除上传的文件
sunjing
clearRichfaces 4fileupload
页面代码
<h:form id="fileForm"> <rich:
- 技术文章备忘
bit1129
技术文章
Zookeeper
http://wenku.baidu.com/view/bab171ffaef8941ea76e05b8.html
http://wenku.baidu.com/link?url=8thAIwFTnPh2KL2b0p1V7XSgmF9ZEFgw4V_MkIpA9j8BX2rDQMPgK5l3wcs9oBTxeekOnm5P3BK8c6K2DWynq9nfUCkRlTt9uV
- org.hibernate.hql.ast.QuerySyntaxException: unexpected token: on near line 1解决方案
白糖_
Hibernate
文章摘自:http://blog.csdn.net/yangwawa19870921/article/details/7553181
在编写HQL时,可能会出现这种代码:
select a.name,b.age from TableA a left join TableB b on a.id=b.id
如果这是HQL,那么这段代码就是错误的,因为HQL不支持
- sqlserver按照字段内容进行排序
bozch
按照内容排序
在做项目的时候,遇到了这样的一个需求:
从数据库中取出的数据集,首先要将某个数据或者多个数据按照地段内容放到前面显示,例如:从学生表中取出姓李的放到数据集的前面;
select * fro
- 编程珠玑-第一章-位图排序
bylijinnan
java编程珠玑
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Random;
public class BitMapSearch {
- Java关于==和equals
chenbowen00
java
关于==和equals概念其实很简单,一个是比较内存地址是否相同,一个比较的是值内容是否相同。虽然理解上不难,但是有时存在一些理解误区,如下情况:
1、
String a = "aaa";
a=="aaa";
==> true
2、
new String("aaa")==new String("aaa
- [IT与资本]软件行业需对外界投资热情保持警惕
comsci
it
我还是那个看法,软件行业需要增强内生动力,尽量依靠自有资金和营业收入来进行经营,避免在资本市场上经受各种不同类型的风险,为企业自主研发核心技术和产品提供稳定,温和的外部环境...
如果我们在自己尚未掌握核心技术之前,企图依靠上市来筹集资金,然后使劲往某个领域砸钱,然
- oracle 数据块结构
daizj
oracle块数据块块结构行目录
oracle 数据块是数据库存储的最小单位,一般为操作系统块的N倍。其结构为:
块头--〉空行--〉数据,其实际为纵行结构。
块的标准大小由初始化参数DB_BLOCK_SIZE指定。具有标准大小的块称为标准块(Standard Block)。块的大小和标准块的大小不同的块叫非标准块(Nonstandard Block)。同一数据库中,Oracle9i及以上版本支持同一数据库中同时使用标
- github上一些觉得对自己工作有用的项目收集
dengkane
github
github上一些觉得对自己工作有用的项目收集
技能类
markdown语法中文说明
回到顶部
全文检索
elasticsearch
bigdesk elasticsearch管理插件
回到顶部
nosql
mapdb 支持亿级别map, list, 支持事务. 可考虑做为缓存使用
C
- 初二上学期难记单词二
dcj3sjt126com
englishword
dangerous 危险的
panda 熊猫
lion 狮子
elephant 象
monkey 猴子
tiger 老虎
deer 鹿
snake 蛇
rabbit 兔子
duck 鸭
horse 马
forest 森林
fall 跌倒;落下
climb 爬;攀登
finish 完成;结束
cinema 电影院;电影
seafood 海鲜;海产食品
bank 银行
- 8、mysql外键(FOREIGN KEY)的简单使用
dcj3sjt126com
mysql
一、基本概念
1、MySQL中“键”和“索引”的定义相同,所以外键和主键一样也是索引的一种。不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引。用于外键关系的字段必须在所有的参照表中进行明确地索引,InnoDB不能自动地创建索引。
2、外键可以是一对一的,一个表的记录只能与另一个表的一条记录连接,或者是一对多的,一个表的记录与另一个表的多条记录连接。
3、如
- java循环标签 Foreach
shuizhaosi888
标签java循环foreach
1. 简单的for循环
public static void main(String[] args) {
for (int i = 1, y = i + 10; i < 5 && y < 12; i++, y = i * 2) {
System.err.println("i=" + i + " y="
- Spring Security(05)——异常信息本地化
234390216
exceptionSpring Security异常信息本地化
异常信息本地化
Spring Security支持将展现给终端用户看的异常信息本地化,这些信息包括认证失败、访问被拒绝等。而对于展现给开发者看的异常信息和日志信息(如配置错误)则是不能够进行本地化的,它们是以英文硬编码在Spring Security的代码中的。在Spring-Security-core-x
- DUBBO架构服务端告警Failed to send message Response
javamingtingzhao
架构DUBBO
废话不多说,警告日志如下,不知道有哪位遇到过,此异常在服务端抛出(服务器启动第一次运行会有这个警告),后续运行没问题,找了好久真心不知道哪里错了。
WARN 2015-07-18 22:31:15,272 com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(84)
- JS中Date对象中几个用法
leeqq
JavaScriptDate最后一天
近来工作中遇到这样的两个需求
1. 给个Date对象,找出该时间所在月的第一天和最后一天
2. 给个Date对象,找出该时间所在周的第一天和最后一天
需求1中的找月第一天很简单,我记得api中有setDate方法可以使用
使用setDate方法前,先看看getDate
var date = new Date();
console.log(date);
// Sat J
- MFC中使用ado技术操作数据库
你不认识的休道人
sqlmfc
1.在stdafx.h中导入ado动态链接库
#import"C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","end")2.在CTestApp文件的InitInstance()函数中domodal之前写::CoIniti
- Android Studio加速
rensanning
android studio
Android Studio慢、吃内存!启动时后会立即通过Gradle来sync & build工程。
(1)设置Android Studio
a) 禁用插件
File -> Settings... Plugins 去掉一些没有用的插件。
比如:Git Integration、GitHub、Google Cloud Testing、Google Cloud
- 各数据库的批量Update操作
tomcat_oracle
javaoraclesqlmysqlsqlite
MyBatis的update元素的用法与insert元素基本相同,因此本篇不打算重复了。本篇仅记录批量update操作的
sql语句,懂得SQL语句,那么MyBatis部分的操作就简单了。 注意:下列批量更新语句都是作为一个事务整体执行,要不全部成功,要不全部回滚。
MSSQL的SQL语句
WITH R AS(
SELECT 'John' as name, 18 as
- html禁止清除input文本输入缓存
xp9802
input
多数浏览器默认会缓存input的值,只有使用ctl+F5强制刷新的才可以清除缓存记录。如果不想让浏览器缓存input的值,有2种方法:
方法一: 在不想使用缓存的input中添加 autocomplete="off"; eg: <input type="text" autocomplete="off" name