程式效能分析常需奈秒級時間戳。Linux 用戶空間可用 clock_gettime 實現,精度遠高於 gettimeofday。

long sys_clock_gettime(clockid_t which_clock, struct timespec *tp);
CLOCK_REALTIME:系統實時時間 (UTC 1970 起),受用戶修改系統時間影響。CLOCK_MONOTONIC:單調時鐘,從開機起計,不受系統時間變更影響,適合測量間隔。CLOCK_PROCESS_CPUTIME_ID:本進程 CPU 耗時。CLOCK_THREAD_CPUTIME_ID:本線程 CPU 耗時。struct timespec {
time_t tv_sec; // 秒
long tv_nsec; // 奈秒
};
#include
#include
#include
int main(void) {
struct timespec time_start={0,0}, time_end={0,0};
clock_gettime(CLOCK_REALTIME, &time_start);
printf("start time %llus, %llu ns\n", time_start.tv_sec, time_start.tv_nsec);
clock_gettime(CLOCK_REALTIME, &time_end);
printf("end time %llus, %llu ns\n", time_end.tv_sec, time_end.tv_nsec);
printf("duration: %llus %llu ns\n", time_end.tv_sec-time_start.tv_sec, time_end.tv_nsec-time_start.tv_nsec);
return 0;
}
gcc test.c -o test -lrt
./test
# start time 1397395863s, 973618673 ns
# end time 1397395863s, 973633297 ns
# duration: 0s 14624 ns (約 15 微秒,一次 printf 開銷)
連結時需加 -lrt (Real-Time library)。此法適合微基準測試與高精度計時需求。
Linux 系統管理員必會的 Vim 進階操作:五大模式、Taglist、Cscope、Ctags 整合
Linux NBMA 與 BMA 網路交換模式深度對比:幀中繼/ATM vs 乙太網交換機學習機制
Linux 網路設定全攻略:IP 位址配置三大方法與永久生效技巧
kill 與 killall 差異大解析:腳本啟動方式決定進程名稱,誤殺風險須知
Linux which 指令完整用法:尋找可執行檔路徑、繞過 alias、判斷內建指令
Linux 線上替換運行中文件:避開 cp 陷阱,掌握 mv/rsync 原子性替換之道