iOS 獲取系統啟動時間

2021-07-08 22:26:25 字數 909 閱讀 8805

做乙個流量監控,之前的**是通過sysctl讀取程序列表,取得kernel_task程序的啟動時間作為系統啟動時間,如果系統重啟就需要把網絡卡記錄的流量全部累加,否則用本次讀取的網絡卡流量資料減去上一次記錄的資料認為是這段時間內使用者產生的流量。

在ios9上 sysctl被封了,於是這段**就掛了。沒辦法拿到系統啟動時間,就會不停的累加網絡卡記錄的全部流量。

使用sysctl取得kernel_task啟動時間

+ (nsdate *)systemstarttime

; int err = sysctl( (int *) name, (sizeof(name) / sizeof(*name)) - 1, null, &length, null, 0);

if (err == -1)

if (err == 0)

sysctl( (int *) name, (sizeof(name) / sizeof(*name)) - 1, procbuffer, &length, null, 0);

int count = (int)length / sizeof(struct kinfo_proc);

for (int i = 0; i < count; ++i)}}

return nil;

}

使用sysctlbyname取得boottime

+ (nsdate *)systemstarttime
boottime 也是有問題的,就是使用者手動設定系統時間後,bootime會變動成手動設定的那個時刻;另外mach_absolute_time讀取出來的tick數和bootime是一致的,個人猜測boottime其實就是換算mach_absolute_time()的結果。

linux獲取系統啟動時間

1 前言 2 sysinfo結構 sysinfo結構保持了系統啟動後的資訊,主要包括啟動到現在的時間,可用記憶體空間 共享記憶體空間 程序的數目等。man sysinfo得到結果如下所示 struct sysinfo 3 獲取系統啟動時間 通過sysinfo獲取系統啟動到現在的秒數,用當前時間減去這...

linux獲取系統啟動時間

1 前言 2 sysinfo結構 sysinfo結構保持了系統啟動後的資訊,主要包括啟動到現在的時間,可用記憶體空間 共享記憶體空間 程序的數目等。man sysinfo得到結果如下所示 1 struct sysinfo 3 獲取系統啟動時間 通過sysinfo獲取系統啟動到現在的秒數,用當前時間減...

linux獲取系統啟動時間

1 前言 2 sysinfo結構 sysinfo結構保持了系統啟動後的資訊,主要包括啟動到現在的時間,可用記憶體空間 共享記憶體空間 程序的數目等。man sysinfo得到結果如下所示 1 struct sysinfo 3 獲取系統啟動時間 通過sysinfo獲取系統啟動到現在的秒數,用當前時間減...