Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Printf 如何用D语言(dtrace)正确打印uint64\t_Printf_Solaris_Dtrace_Uint64 - Fatal编程技术网

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
a
uint64\t
变量,或者我应该通过
%Y
打印它?谢谢。我已经编辑了我的答案,以建议使用哪些整数格式,以及
%Y