我正在使用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开发)。
答案 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变量。 (%Y
和timestamp
不从该纪元开始计算。)
uint64_t参数被解释为自1970年1月1日00:00 Universal Coordinated Time以来的纳秒数,并以以下cftime(3C)形式打印:“%Y%a%b%e%T %Z“。