Printf 如何用D语言(dtrace)正确打印uint64\t
我正在尝试使用Printf 如何用D语言(dtrace)正确打印uint64\t,printf,solaris,dtrace,uint64,Printf,Solaris,Dtrace,Uint64,我正在尝试使用DTrace脚本uint64\u t类型的printf一些Solaris内核级信息(例如timestamp)。如何在我的DTrace代码中安全、准确地打印uint64\t 我知道用C语言打印uint64的正确方法是: #define __STDC_FORMAT_MACROS #include <sys/inttypes.h> //sys: Kernel level uint64_t timestamp; printf("%"PRIu64"\n", timestamp)
DTrace
脚本uint64\u t
类型的printf
一些Solaris
内核级信息(例如timestamp
)。如何在我的DTrace
代码中安全、准确地打印uint64\t
我知道用C语言打印uint64的正确方法是:
#define __STDC_FORMAT_MACROS
#include <sys/inttypes.h> //sys: Kernel level
uint64_t timestamp;
printf("%"PRIu64"\n", timestamp);
\define\u STDC\u FORMAT\u宏
#include//sys:内核级
uint64_t时间戳;
printf(“%”PRIu64“\n”,时间戳);
DTrace
D中的等价物是什么?(%d
和`%llu不精确且危险)
注意不要与其他名为“D”的编程语言(Walter Bright开发的类似C++的编程语言)混淆。根据:
D编译器不需要在printf格式转换中使用大小前缀。
C printf例程要求您通过添加前缀来指示参数的大小,例如长为%ld或长为%lld。
D编译器知道参数的大小和类型,因此在D printf语句中不需要这些前缀
此外,d中的%d
和%i
格式将处理有符号或无符号整数,因此您可以使用%d
、%i
或%u
中的任何一种来打印以10为基数的无符号整数值,所有结果都相同
OP在评论中询问了%Y
格式。这可用于uint64_t值,该值包含自1970年1月1日以来的纳秒数,例如内置变量。(timestamp
和vtimestamp
不从该历元开始计算。)
uint64_t参数被解释为自1970年1月1日世界协调时间00:00以来的纳秒数,并以以下cftime(3C)形式打印:“%Y%a%b%e%t%Z。”
这是否意味着我可以使用
%d
安全地printf
auint64\t
变量,或者我应该通过%Y
打印它?谢谢。我已经编辑了我的答案,以建议使用哪些整数格式,以及%Y
。