Linux文件中的List.h?

2023-12-19

in linux/include/linux/list.h https://github.com/torvalds/linux/blob/305230142ae0637213bf6e04f6d9f10bbcb74af8/include/linux/list.h#L600我发现:

/**
 * list_entry - get the struct for this entry
 * @ptr:    the &struct list_head pointer.
 * @type:   the type of the struct this is embedded in.
 * @member: the name of the list_head within the struct.
 */
#define list_entry(ptr, type, member) \
    container_of(ptr, type, member)

“获取此条目的结构”是什么意思我可以查看使用示例以更好地理解吗?


这是 C 语言中多态性的一个很好的例子。借用 C++ 的术语,list_entry()宏允许你从list_head类型为包含它的任何类型。

看一下kthread.c一个简单的基本示例:

内核/kthread.c:

struct kthread_create_info
{
    /* Information passed to kthread() from kthreadd. */
    int (*threadfn)(void *data);
    void *data;
    int node;

    /* Result passed back to kthread_create() from kthreadd. */
    struct task_struct *result;
    struct completion *done;

    struct list_head list;
};

...
int kthreadd(void *unused)
{
...
        while (!list_empty(&kthread_create_list)) {
            struct kthread_create_info *create;

            create = list_entry(kthread_create_list.next,
                        struct kthread_create_info, list);
...
            create_kthread(create);

通过包括list_head对象在kthread_create_info结构体,你可以这样说kthread_create_info“源自于list_head。这允许kthread_create_info用作列表中的节点的对象,这意味着您可以将它们传递给中声明的任何函数list.h通过简单地取消引用list结构体的成员。这list_entry然后,宏为您提供从基类指针到其派生起始地址的映射。

换句话说,给定一个list_head您知道的对象包含在外部kthread_create_infostruct,您可以恢复指向kthread_create_info容器。

这是 C 编程中极其常见的模式,其中需要面向对象的构造,但 C++ 编译器不可用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux文件中的List.h? 的相关文章

  • 在 OnModelCreating 期间设置列名称

    Issue 我目前正在尝试通过设置的属性为我的表及其列添加前缀 我正在使用实体框架核心 我已经正确地为表名添加了前缀 但我似乎无法弄清楚列的前缀 我有一种感觉 我需要使用反射 我已经留下了我的 可能很糟糕的 反思尝试 有人有办法在实体中设置
  • 在现代 C++ 中,临时生命周期延长何时有用?

    在 C 中 您可以将函数的返回值 返回值 而不是引用 绑定到 const 引用 并且代码仍然有效 因为该临时对象的生命周期将延长到作用域末尾 例如 std string get string return abc void f const
  • 在 C# 中调用 C++ 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有很多用 C 编写的库 我想从 C 调用这些库 但是 我遇到了很多问题 我想知道是否有书籍或指南告诉我如何做到这一点 Dll导入 htt
  • 一元 +/- 运算符如何可能导致“-a”或“+a”中的整数提升,“a”是算术数据类型常量/变量?

    这句看似微不足道的台词摘自我的迈克 巴纳汉和布雷迪的 C 书 第 2 8 8 2 节 http publications gbdirect co uk c book chapter2 expressions and arithmetic h
  • 将表(行)与 OpenXML SDK 2.5 保持在一起

    我想在 Word 文档中生成多个表 每行 2 行 但我想将这两行保留在一起 如果可能的话 new KeepNext 第一行不起作用 new KeepNext 第一行的最后一段不起作用 new CantSplit 放在桌子上不起作用 在所有情
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • 如何对 NServiceBus.Configure.WithWeb() 进行单元测试?

    我正在构建一个 WCF 服务 该服务接收外部 IP 上的请求并将其转换为通过 NServiceBus 发送的消息 我的单元测试之一调用Global Application Start 它执行应用程序的配置 然后尝试将 Web 服务解析为 验
  • 如何在三个 IEnumerable 上使用 Zip [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Linq 从 3 个集合创建项目 https stackoverflow com questions 5284315 create items from 3 collections using
  • 析构函数中的异步操作

    尝试在类析构函数中运行异步操作失败 这是代码 public class Executor public static void Main var c1 new Class1 c1 DoSomething public class Class
  • 搜索实体的所有字段

    我正在尝试在客户数据库上实现 多功能框 类型的搜索 其中单个查询应尝试匹配客户的任何属性 这是一些示例数据来说明我想要实现的目标 FirstName LastName PhoneNumber ZipCode Mary Jane 12345
  • 使用具有抗锯齿功能的 C# 更改抗锯齿图像的背景颜色

    我有一个图像需要更改背景颜色 例如 将下面示例图像的背景更改为蓝色 然而 图像是抗锯齿的 所以我不能简单地用不同的颜色替换背景颜色 我尝试过的一种方法是创建第二个图像 仅作为背景 并更改其颜色并将两个图像合并为一个图像 但是这不起作用 因为
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • 在 OpenGL 中渲染纹理 1 到 1

    所以我想做的是使用 OpenGL 和 C 将纹理渲染到平面上 作为显示图像的一种方式 但是我需要确保在渲染纹理时没有对纹理进行任何处理 抗锯齿 插值 平滑 模糊等 这是 OpenGL 处理渲染纹理的默认方式吗 或者是否需要设置一些标志才能禁
  • 如何获取 bash 中从 Ping 接收到的数据包的百分比?

    当 ping 主机时 我希望输出仅显示收到的数据包 已发送 5 个 的百分比 我想我需要使用grep不知怎的 但我不知道如何 我是 bash 编程的新手 这是我所在的地方 ping c 5 q host grep grep 中应该包含什么
  • SVN 不断提示我输入密码并拒绝缓存我的凭据

    环境 Eclipse Indigo Ubuntu 11 04 Subclipse 1 6 SVN 客户端 Subclipse RabbitVCS 我通过 svn ssh 连接 我的网址如下所示 svn ssh 我的名字 我的域名 路径 我可
  • ASP.NET MVC 路由:如何从 URL 中省略“索引”

    我有一个名为 StuffController 的控制器 具有无参数索引操作 我希望从表单中的 URL 调用此操作mysite com stuff 我的控制器定义为 public class StuffController BaseContr
  • 如何使用 Perl 在 Unix 中获取文件创建时间

    如何使用 perl 在 unix 中获取文件创建时间 我有这个命令显示文件的最后修改时间 perl MPOSIX le print strftime d b Y H M localtime lstat 9 for ARGV file txt
  • 使用 using 声明时,非限定名称查找如何工作?

    根据 C 标准 这是格式错误还是格式良好 namespace M struct i namespace N static int i 1 using M i using N i int main sizeof i Clang 拒绝它 GCC
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl

随机推荐

  • 未为加载的控件生成 ASP.NET 客户端 ID

    我在 updatepanel 中有一个 UserControl AddressInfoGroup 它通过 loadControl 方法动态加载用户控件 AddressInfo 我在同一页面上还有另外两个这样的控件 它们都可以正常工作 当 A
  • 为什么 32 位整数的左移位“<<”在使用超过 32 次时不能按预期工作?

    当我编写以下程序并使用 GNU C 编译器时 输出为1我认为这是由于编译器执行的旋转操作造成的 include
  • 带有 PDF 的新标签 - 下载按钮在 Chrome 上不起作用

    当用户单击按钮时 我向服务器发送请求 然后服务器发回 pdf base64 然后我在新选项卡中打开它 但下载按钮来自Chrome预览不起作用 当我单击它时没有任何操作 它在 Firefox 上运行良好 Chrome预览下载按钮 定义变量if
  • Oracles 'alter system set local_listener' 到底做了什么

    为什么我很好奇 我在安装 Oracle Express 数据库时总是遇到问题 因为我从来没有第一次就成功过 安装 Oracle Express 后下次启动计算机时 我始终收到常见错误 https stackoverflow com ques
  • LINQ to XML:上下移动节点的最有效方法是什么

    我需要在某些节点之前和之后移动同级节点 这是我正在使用的代码
  • 如何读取 Mahout 聚类输出

    我已经对 Mahout 教程中的合成控制数据运行了 k 均值聚类算法 并且想知道是否有人可以解释如何解释输出 我运行 clusterdump 并收到如下所示的输出 被截断以节省空间 CL 592 n 57 c 30 726 29 813 r
  • 长时间偶然的 Young 垃圾收集暂停

    我们调整 GC 以最小化 stop the world 暂停 Perm 和 Tenured 一代表现良好 Young在大多数情况下工作正常 暂停通常不超过500ms 注意 Times user 0 35 sys 0 02 real 0 06
  • 更新 iPhone 应用程序行为

    我为iPhone设备开发了一款与数据库相关的应用程序 SQlite数据库 现在我想用更多功能更新该应用程序 我想推送同一应用程序的更新 在这里 我在推送更新时更关心用户数据 所以我的问题是 如果我将推送更新 那么更新是否会清除 sqlite
  • 关于 C++ 中的结构化异常 (SEH),我应该了解哪些信息?

    每个 C 开发人员都应该了解有关结构化异常的哪些要点 它们是相当于 Unix 信号的 Win32 可以让您捕获 CPU 异常 例如访问冲突 非法指令 除零等 使用正确的编译器选项 对于 Visual C 为 EHa C 异常使用与堆栈展开相
  • 如何使用 Apache MINA SSHD 阻止 SFTP 删除操作

    我正在尝试使用 Apache Mina SSHD 创建自定义 sftp 服务器 到目前为止我的代码 SshServer sshd SshServer setUpDefaultServer sshd setPort PORT NUMBER s
  • 在数据库中插入数据集记录

    我需要将数据集记录 C 插入 MS Access 数据库表中 我需要批量插入记录 我怎样才能在 C 中做到这一点 对于此类任务 请考虑使用数据适配器 http msdn microsoft com en us library system
  • Prometheusmetrics_path 中的问号被编码

    由于 Prometheus 仅支持文本指标和许多工具返回 json 格式的指标 如 Finatra Spring Boot 因此我创建了一个简单的代理 它将 json 转换为文本 因为我想将它用于多个源 所以要从中检索实际指标的目标是通过查
  • Websocket 消息是否会无序到达?

    如果我们通过同一个 html5 websocket 发送两条消息 彼此间隔毫秒 理论上 消息到达的顺序是否可能与发送的顺序不同 简短回答 不 长答案 WebSocket 通过 TCP 运行 因此在该级别上 EJP 的答案适用 WebSock
  • 运行应用程序脚本后,Google 电子表格冻结

    我的 Google 电子表格中附加了一个应用程序脚本 有一个函数可以在电子表格中执行很多操作 这就是它的作用 创建一个新工作表 设置新工作表的列标题 将数据复制到新工作表中 设置公式 删除多余的列 删除多余的行 在现有工作表中添加一行 工作
  • 指定并保存精确尺寸(以像素为单位)的图形

    假设我有一张尺寸为 3841 x 7195 像素的图像 我想将图形的内容保存到磁盘 从而生成一个图像精确尺寸我以像素为单位指定 没有轴 没有标题 只是图像 我个人并不关心 DPI 因为我只想指定图像在屏幕中在磁盘中所占的大小以像素为单位 我
  • Google 将自动完成功能设置为在 Windows 移动版 IE 浏览器中不起作用

    我们正在为我们的产品建立一个移动网站ridingo http www ridingo com 我们在我们的网站上广泛使用谷歌地点自动完成功能 这用于在用户键入时向他们提供建议 我们在多个浏览器和设备上对此进行了测试 这在 Android 设
  • Android 意图输入 Google Play 音乐应用程序的搜索查询

    您好 我正在尝试使用我的应用程序提供的字符串自动填充 Google Play 音乐上的搜索栏 我目前打算打开 Google Play 音乐 但我无法找到正确的参数来填充 Google Play 音乐上的搜索栏 这是我的代码 Intent i
  • Android webview 性能缓慢

    我正在用 javascript 编写一个游戏 这个应用程序在我的浏览器上运行良好 速度很快 但我在使用 android webview 运行它时遇到了一些麻烦 启动应用程序需要 5 秒或更长时间 我认为这有点慢 但也许这是正常的 在游戏菜单
  • 如何将只读数据发送到其他线程而不进行复制?

    我正在尝试将只读数据的 视图 发送到另一个线程进行处理 基本上主线程确实工作 不断更新一组数据 每当发生更新时 主线程应该将更新的数据发送到其他线程 在那里它们将以只读方式处理它 我不想复制数据 因为它可能非常大 无论如何 主线程还在内存中
  • Linux文件中的List.h?

    in linux include linux list h https github com torvalds linux blob 305230142ae0637213bf6e04f6d9f10bbcb74af8 include linu