【问题标题】:how to understand this pointer with array?如何用数组理解这个指针?
【发布时间】:2014-04-10 08:48:38
【问题描述】:
int netif_rx(struct sk_buff *skb)
{
struct timeval stamp;
if (skb->stamp.tv_sec == 0)
do_gettimeofday(&skb->stamp);
}

我想获取内核开始执行上述函数的时间,最后我想将它存储在缓冲区 skbuf 中。如果我像上面那样编码,那么是否可以将调度时间存储在缓冲区中?请有人帮助我吗?我的问题 - 如果我调用 sched_clock();那么它将给出系统的调度时间,但最终如何将其存储在缓冲区中?是否可以使用结构指针来存储调度时钟的值?

【问题讨论】:

  • sched_clock 不接受参数。
  • 是的!确实如此。但是如何将其存储在 skbuf 中??
  • 你不是说sk_buff吗?我在 Linux 内核中找不到struct skbuff
  • 你可以在 /linux/net/core/dev.c 中找到: int netif_rx(struct sk_buff *skb)
  • 上面的api是receiver端的api,它接收来自sender的数据。我想计算它接收数据的时间并将其存储在缓冲区中。

标签: c arrays pointers struct memory-address


【解决方案1】:

我想获取内核开始执行上述函数的时间,最后我想将它存储在缓冲区skbuf中。

int getsocketschedtime(stuct skbuf *sb)
{
    struct timeval tv;
    gettimeofday(&tv, NULL); 
    sb->tstamp.off_sec = tv.tv_sec;
    sb->tstamp.off_usec = tv.tv_usec;
    // ... do smth useful
}

【讨论】:

  • gettimeofday 和timestmap 一样??我想要一个时间戳。
  • "gettimeofday 和timestmap 一样??" -- 是的,gettimeofday 返回时间戳(通过参考 &tv)。
  • @OlegTrakhman gettimeofday 在内核中可用吗?他的代码在网络驱动程序中。
  • @Barmar : gettimeofday 在内核中可用。
  • 我必须承认我不喜欢网络/套接字;我刚刚看到 struct skb_timeval 和 struct timeval 是相似的,尽管它们的名称,更重要的是它们的字段名称(off_sec 与 tv_sec)表明它们可能有不同的用途。小心点,像往常一样,RTFM :)
【解决方案2】:

我认为应该是:

__net_timestamp(skb);

我在http://lxr.free-electrons.com/source/include/linux/skbuff.h找到了这个功能

static inline void __net_timestamp(struct sk_buff *skb)
 {
         skb->tstamp = ktime_get_real();
 }

【讨论】:

  • 你可以在 /linux/net/core/dev.c 中找到:int netif_rx(struct sk_buff *skb)。上面的api是receiver端api,它接收来自sender的数据。我想计算它接收数据并将其存储在缓冲区中的时间。你能帮我吗??
  • 我的代码不就是这样吗?我不是内核程序员,我只是在Linux源码中搜索了sched_clock,这是我最好的猜测。
  • 你的代码中的 sb->tv64 是什么?我应该在哪里寻找 sched_clock 结构??
  • 谢谢。修改内核后,启动内核的命令是什么??
  • 对不起,我不知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
相关资源
最近更新 更多