如何在D语言中正确打印uint64_t (dtrace)



我正在尝试使用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);

DTraced中等效的是什么?(%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为基数的无符号整型值,结果都是相同的。

OP在关于%Y格式的评论中问道。这可以用于uint64_t值,它包含自1970年1月1日以来的纳秒数,例如内置的walltimestamp变量。(timestampvtimestamp而不是)

uint64_t参数被解释为自1970年1月1日世界协调时间00:00以来的纳秒数,并以以下cftime(3C)形式打印:"%Y %a %b %e %T % z"。

相关内容

  • 没有找到相关文章

最新更新