我正在尝试打印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。
答案 0 :(得分:0)
请注意代码中;
行末尾的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的文档: