首页 > 系统相关 >linux宏offset_of学习随笔

linux宏offset_of学习随笔

时间:2023-09-04 11:34:00浏览次数:32  
标签:offset member 地址 num student linux 随笔 type

offset_of 宏

定义:include/linux/stddfx.h

功能:给出两个参数:结构体和它的成员,获取其成员关于结构体首地址的偏移:

#define offset_of(type, member) (unsigned long) &((type*)0)->member

这个想法挺精巧的,逐层拆开,首先看里面的(type*)0  ,这是将0地址强行转换为了一个type结构体的指针。在这里我们先假设一个结构体:

typedef struct student{
    char name[16];
    int num;
    int age;
}

对于这样的一个结构体,使用offset_of(type,member)时,会写成offset_of(student,num)这样的格式。

 

第二层,((type*)0)-> member  ,这里要注意结合的顺序。这一层强转指针后,访问结构体的成员member。  放在例子里就是 ((student*)0)->num   即student->num

 

第三层,&((type*)0)-> member,这里已经是取巧了。利用了0地址。式子应该被理解成

&(  ((type*)0)-> member )  ,即&(student->num)由于起始地址是零地址,这样就能直接求出偏移量。


标签:offset,member,地址,num,student,linux,随笔,type
From: https://www.cnblogs.com/namezhyp/p/17676490.html

相关文章

  • Linux下启动 jar 包的几种常见方式
    Linux下通过java命令启动jar包的几种常见方式方法一:直接启动jar包java-jarXXX.jar1缺点:当前ssh窗口会被锁定,不能再操作其他命令,如果需要执行其他命令,则需要打断进程,可按CTRL+C打断程序运行,或直接关闭窗口,程序也会退出。方法二:后台启动jar包java-jarXXX.jar&1&代表......
  • Linux日志管理经验总结(crontab+logrotate)
    Linux系统-部署-运维系列导航 日志管理目标日志的管理,一般包括两大部分日志内容,合理的日志内容(日志锚点,内容格式,等)可以为应用服务的执行记录、问题排查提供最有力的帮助日志存档规则,包括日志分割方式(按日期、按文件大小,等),日志存档数量,如只保存最近一个月,等对于自行开发的......
  • Linux开机启动方案
    Linux系统-部署-运维系列导航一.系统服务如果组件已经安装为系统服务,默认服务文件为xxx.service,存储在/usr/lib/systemd/system可以使用以下2种方式设置开机启动systemctl方式systemctlenable/disablexxx指令设置/取消开机启动--查看是否开机启动[root@localhosts......
  • Linux系统screen命令的用法
    1、https://www.cnblogs.com/watson04/p/16950232.html多窗口screen,像许多的窗口管理器一样,能支持多窗口。这个功能在处理多个任务且同时没有打开新的会话时很有用。作为一个系统管理员,我常常要同时开四五个SSH会话。在每个shell下,我可能要处理两三个任务。不使用screen的话,......
  • Tenable Nessus 10.6.0 (Unix, Linux, Windows) - #1 漏洞评估解决方案
    TenableNessus10.6.0(Unix,Linux,Windows)-#1漏洞评估解决方案发布Nessus试用版自动化安装程序,支持macOSVentura、RHEL9和Ubuntu22.04请访问原文链接:https://sysin.org/blog/nessus-10/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgNessus漏洞评......
  • Linux基本命令(2)
    ls-列出当前目录下的文件和文件夹示例:ls-l显示详细的文件列表注释:ls命令用于列出当前目录下的文件和文件夹。使用-l选项可以显示更详细的信息。cd-切换目录示例:cd/path/to/directory切换到指定路径的目录注释:cd命令用于切换当前工作目录到指定的路径。pwd-显示当......
  • 轻松浏览Linux文件系统:ls命令的实用指南
    当谈到Linux命令行操作时,ls是一个非常基础但又非常重要的命令。它用于列出文件和目录,帮助您浏览和了解当前工作目录的内容。在这篇博客文章中,我们将介绍ls命令的基本用法和一些常见的使用示例。什么是ls命令?ls是"list"的缩写,是Linux和Unix操作系统中的一个命令行工具,用于列出文件和......
  • QQ for Linux 正式发布 3.2.0
    QQforLinux正式发布3.2.0来源:OSCHINA编辑: 局2023-09-0215:57:28 8Linux版QQ正式发布了3.2.0。QQLinux版3.2.0(2023.09.01)1、新增夜间模式并支持跟随系统,享受更沉浸的聊天体验;2、新增QQ截图能力,快捷方便,提升办公效率;3、新增群应用功能,图片......
  • linux查看平均cpu占用率
    如果想要获取平均占用率,可以在top命令后添加"-d"参数,指定刷新时间间隔(单位为秒),例如top-d1这样会每隔1秒更新一次CPU的占用率信息。请注意,top命令会实时显示系统状态,您可以按下键盘上的"q"来退出top命令。......
  • Linux的常用命令
    Linux常用命令名称作用和用法说明ls查看目录与文件#显示当前目录下所有文件的详尽信息:ls-lamkdir创建目录#在当前目录下创建test目录:mkdirtest#在/opt/test目录下创建目录img,若无test目录,先创建test目录:mkdir-p/opt/test/imgcat查看文件内容#查看desc.txt的内容:catdesc......