我正在尝试打印 atomic_long_t 值,但我无法找到正确的格式来使用它以打印实际信息。我试过了
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);
和
printk(KERN EMERG "NR_ACTIVE_ANON: %ld",l);
但无论如何我得到的都是 0。我也尝试过 atomic_long_read,但它需要一个结构指针 atomic_long_t。
最佳答案
注意代码中
for_each_zone()
行末尾的;
。它可能不应该存在。你是对的,你应该使用
atomic_long_read()
。只要给它一个它想要的指针。没有必要为原子类型使用一些奇特的printk()
格式(现在也没有)。这是一个例子:#include <asm/atomic.h> ... atomic_long_t v = ATOMIC_LONG_INIT(0); atomic_long_set(&v, 123); pr_info("%ld\n", atomic_long_read(&v));
此代码打印
123
。此外,请务必将原子 API 用于其他操作。因为基本上
atomic_long_t
类型是一个结构,定义如下:typedef atomic_t atomic_long_t; typedef struct { long counter; } atomic64_t;
而且我很确定这样做正是出于这个原因:防止用户对该类型使用常规操作,或将其转换为某种常规类型。
你可以找到很多关于原子 API 的文档:
关于c - C中printk的atomic_long_t的打印格式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49930181/