我正在尝试使用DTrace
脚本,以uint64_t
(例如timestamp
)的类型printf
一些Solaris
内核级信息。如何在我的DTrace
代码中安全准确地打印uint64_t
。
我知道在C中打印uint64_t
的正确方法是:
#define __STDC_FORMAT_MACROS
#include <sys/inttypes.h> //sys: Kernel level
uint64_t timestamp;
printf("%"PRIu64"n", timestamp);
在 DTrace
d中等效的是什么?(%d
和' %llu是不精确和危险的)。
注意不要与其他命名为"D"的编程语言(Walter Bright开发的一种类似c++的编程语言)混淆
根据DTrace Wiki: Output Formatting:
D编译器不需要在printf格式转换中使用size前缀。C printf例程要求您通过添加前缀来指示参数的大小,例如%ld表示long或%lld表示long。D编译器知道你的参数的大小和类型,所以在你的D printf语句中不需要这些前缀。
此外,D中的%d
和%i
格式可以处理有符号整型或无符号整型,因此您可以使用%d
、%i
或%u
中的任何一种格式来打印以10为基数的无符号整型值,结果都是相同的。
%Y
格式的评论中问道。这可以用于uint64_t值,它包含自1970年1月1日以来的纳秒数,例如内置的walltimestamp变量。(timestamp
和vtimestamp
是而不是)
uint64_t参数被解释为自1970年1月1日世界协调时间00:00以来的纳秒数,并以以下cftime(3C)形式打印:"%Y %a %b %e %T % z"。