C中printk的原子长度的打印格式是什么
我试图打印一个原子长度值,但找不到使用它的正确格式,因此无法打印实际信息。我试过了C中printk的原子长度的打印格式是什么,c,linux,linux-kernel,operating-system,system-calls,C,Linux,Linux Kernel,Operating System,System Calls,我试图打印一个原子长度值,但找不到使用它的正确格式,因此无法打印实际信息。我试过了 struct zone *mzone; atomic_long_t l; for_each_zone(mzone); l=mzone ->vm_stat[NR_ACTIVE_ANON]; printk(KERN EMERG "NR_ACTIVE_ANON: %lu",l); 及 但不管怎样,我得到的都是0。我也尝试过原子读取,但它需要一个结构指针原子读取 注意在代码中的每一行的末尾。它可能不应该在那里
struct zone *mzone;
atomic_long_t l;
for_each_zone(mzone);
l=mzone ->vm_stat[NR_ACTIVE_ANON];
printk(KERN EMERG "NR_ACTIVE_ANON: %lu",l);
及
但不管怎样,我得到的都是0。我也尝试过原子读取,但它需要一个结构指针原子读取
代码>在代码中的每一行的末尾。它可能不应该在那里
atomic\u long\u read()
,这是对的。只要给它一个它想要的指针。原子类型不需要使用一些奇特的printk()
格式(而且没有)。以下是一个例子:
#包括(参见“原子变量”部分)
如果不顾一切,代码可以
无符号字符buf[sizeof l];memcpy(buf和l、sizeof l)
然后打印buf[]
。您会将数据视为字节的海洋。但也许这就是atomic_long_t
的意义所在,将其视为字节的海洋而不是整数。@chux我很确定原子类型的意义在于避免在多线程环境中使用锁atomic_long_t
的使用不是问题所在。帖子要求如何打印它的值。@chux可能是每个分区()的之后的会导致0?出现该问题?。。无论如何,开发人员应该坚持使用原子API。原子变量没有特殊的printk
格式。否则我们会看到的。
printk(KERN EMERG "NR_ACTIVE_ANON: %ld",l);