2

スクリプトを使用して(例: )のタイプのカーネル レベルの情報を取得しようとしprintfています。コードで安全かつ正確に印刷する方法。Solarisuint64_ttimestampDTraceuint64_tDTrace

uint64_tCでの適切な印刷方法は次のとおりです。

#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++ に似たプログラミング言語) と混同しないでください。

4

1 に答える 1

1

DTrace Wikiによると: 出力フォーマット:

D コンパイラでは、printf 形式の変換でサイズ プレフィックスを使用する必要はありません。C の printf ルーチンでは、long の場合は %ld、long long の場合は %lld などのプレフィックスを追加して、引数のサイズを示す必要があります。D コンパイラは引数のサイズと型を認識しているため、これらのプレフィックスは D の printf ステートメントでは必要ありません。

さらに、D の%dおよび%i形式は符号付きまたは符号なしの整数を処理するため%d、 、%i、またはのいずれかを使用%uして、基数 10 の符号なし整数値をすべて同じ結果で出力できます。

%YOPはフォーマットについてコメントで尋ねました。これは、組み込みのwalltimestamp変数など、1970 年 1 月 1 日エポックからのナノ秒数を含む uint64_t 値に使用できます。(timestampそして、そのエポックからはカウントされvtimestampません。)

uint64_t 引数は、協定世界時 (1970 年 1 月 1 日) 00:00 からのナノ秒数であると解釈され、次の cftime(3C) 形式で出力されます: "%Y %a %b %e %T %Z. "

于 2015-07-14T20:08:26.333 に答える