【问题标题】:C - Linux Kernel - How to use timespec_to_ns()?C - Linux 内核 - 如何使用 timespec_to_ns()?
【发布时间】:2015-12-14 23:08:12
【问题描述】:

我正在尝试将 linux 内核 task_structstart_time 转换为纳秒。我需要给它const struct timespec * 的参数,但start_time 的类型是struct timespec

如何使它成为一个常量和指向timespec 结构的指针?示例代码:

(*kinfo).start_time = timespec_to_ns((*current).start_time);

【问题讨论】:

  • 如果你不知道你需要传递它的地址,那么在内核中编码是很危险的:timespec_to_ns(&current->start_time)(除非有一个非常不正当的理由使用timespec_to_ns(&(*current).start_time);)——或者除非你想得太多了,而且要狠狠地踢自己的小腿。
  • 哈哈!谢谢!别担心,我在上操作系统课,我们正在尝试在虚拟机上拦截 linux 内核中的系统调用。

标签: c linux-kernel timespec


【解决方案1】:

我建议您学习 C 入门,因为您需要非常熟悉 C 编程(尤其是因为 Linux 内核使用了书中所有的 C 技巧)才能编写内核代码(或修改现有的内核代码)。但是,要回答您的问题,您需要传递一个指向该值的指针(这是使用 C 中的 & 运算符完成的)。另外,请对指向结构的指针使用正确的解引用语法 (p->attr)。

kinfo->start_time = timespec_to_ns(&current->start_time);

【讨论】:

  • 请更新为“您可以通过值传递指向xyz 的指针”。通过引用传递是在 C++ 中完成的,而不是 C。我知道“通过引用传递”有时用于代替我上面描述的内容,但它不是一回事,因为你不能修改指针本身,而引用指针可以在函数体内修改。
  • 我从不喜欢在 C 中使用该命名法。是的,从技术上讲,它不是“引用”,但如果我们可以调用 * 取消引用,为什么我们不能调用逆运算& 引用?说“通过值传递指向abc 的指针”而不是“传递对abc 的引用”很笨拙。
  • 这来自 K&R,第 2 版。 stackoverflow.com/questions/27445255/… 最初只是称为“间接”。虽然 K&R 将“取消引用”与“间接”同义使用,但值得注意的是,在 C 中使用“引用”/“引用”总是不正确/错误。
  • 是的,我知道 K&R 没有这么称呼它。我知道,从技术上讲,传递参考是不同的。 然而,我反对“引用”是不正确/错误的普遍共识。 de引用的逆运算不叫reference,这很愚蠢。无论如何,这些天并没有很多编程语言实际上是通过引用传递的......
  • 定义不符合英语语言的机制听起来很奇怪,我会这么说,但语言是一件棘手的事情(细节中的魔鬼等),所以它有帮助准确地说,尤其是在技术主题方面。
猜你喜欢
  • 2017-04-08
  • 2015-07-08
  • 1970-01-01
  • 2020-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多