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

时间:2015-07-14 18:01:38

标签: printf solaris dtrace uint64

我正在使用printf脚本尝试Solaris uint64_t类型为timestamp的某些DTrace内核级别信息(例如uint64_t)。如何在DTrace代码中安全,准确地打印uint64_t

我知道在C中打印#define __STDC_FORMAT_MACROS #include <sys/inttypes.h> //sys: Kernel level uint64_t timestamp; printf("%"PRIu64"\n", timestamp); 的正确方法是:

DTrace

%d D中的等价物是什么? (<buildCommand> <name>org.eclipse.jdt.core.javabuilder</name> <arguments> </arguments> </buildCommand> 和`%llu是不精确和危险的。)

注意不要与名为&#34; D&#34;的其他编程语言混淆(一种类似C ++的编程语言,由Walter Bright开发)。

1 个答案:

答案 0 :(得分:1)

根据DTrace Wiki: Output Formatting

  

D编译器不需要使用带有printf格式转换的大小前缀。   C printf例程要求您通过添加前缀来指示参数的大小,例如%ld表示long或%lld表示long long。   D编译器知道参数的大小和类型,因此在D printf语句中不需要这些前缀。

此外,D中的%d%i格式会处理有符号或无符号整数,因此您可以使用%d%i或{{1}中的任何一种在基数10中打印无符号整数值,所有这些都具有相同的结果。

OP在评论中提到了%u格式。这可以用于包含自1970年1月1日纪元以来的纳秒数的uint64_t值,例如,内置的walltimestamp变量。 (%Ytimestamp 从该纪元开始计算。)

  

uint64_t参数被解释为自1970年1月1日00:00 Universal Coordinated Time以来的纳秒数,并以以下cftime(3C)形式打印:“%Y%a%b%e%T %Z“。