c語言獲取cpu
A. 在linux環境下,我們使用c語言編程,如何正確計算CPU使用率(不限/proc/stat)
我的笨方法:
以/proc/stat為例,它裡面的內容如下:(第一行的幾個單詞,是我為了便於說明,另外標注的)
user nice system idle iowait irq softirq
cpu 65376847 362756 2405159 10834971593 3765180 93399 2395097 0
cpu0 7680302 5263 111909 1355640955 47680 0 185343 0
cpu1 6527638 2261 327795 1356540189 249151 1 24242 0
intr 21259182 122 97003 0 0 0 0 0 0 1 44 0 0 4290639 0 0 0 742540 1330673 0 0 0 0 0 111 173 0 0 0 0 161039 191398 10286 2440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 42582486
btime 1376534806
processes 346513
procs_running 1
procs_blocked 0
softirq 21851001 2 9105868 18006 318205 256633 2 1384334 1159984 60546 9547421
---------------------------- 分割線------------------------------
說明:
user:從系統啟動開始累計到當前時刻,用戶態的CPU時間(單位:jiffies) ,不包含 nice值為負進程。1jiffies=0.01秒
nice:從系統啟動開始累計到當前時刻,nice值為負的進程所佔用的CPU時間(單位:jiffies)
system:從系統啟動開始累計到當前時刻,核心時間(單位:jiffies)
idle:從系統啟動開始累計到當前時刻,除硬碟IO等待時間以外其它等待時間(單位:jiffies)
iowait:從系統啟動開始累計到當前時刻,硬碟IO等待時間(單位:jiffies) ,
irq:從系統啟動開始累計到當前時刻,硬中斷時間(單位:jiffies)
softirq:從系統啟動開始累計到當前時刻,軟中斷時間(單位:jiffies)
CPU時間=user+system+nice+idle+iowait+irq+softirq
-------------------------下面這幾項可以不看------------------
intr:第一個為自系統啟動以來,發生的所有的中斷的次數;然後每個數對應一個特定的中斷自系統啟動以來所發生的次數。
ctxt:自系統啟動以來CPU發生的上下文交換的次數。
btime:從系統啟動到現在為止的時間,單位為秒。
processes:自系統啟動以來所創建的任務的個數目。
procs_running:當前運行隊列的任務的數目。
procs_blocked:當前被阻塞的任務的數目。
-----------------------------計算方法-----------------------------
那麼CPU利用率可以使用以下兩個方法。先取兩個采樣點,然後計算其差值:
cpu usage=(idle2-idle1)/(cpu2-cpu1)*100
cpu usage=[(user_2 +sys_2+nice_2) - (user_1 + sys_1+nice_1)]/(total_2 - total_1)*100
=============================================
建議:要用C語言來編程實現的話,提取各項數據會比較復雜,而用shell腳本來提取的話,會簡單的多;所以你可以嘗試用腳本來提取數據並計算出CPU使用率,然後在C程序中用system( )函數來調用這個腳本。
B. c語言編程對cpu要求高嗎
C語言對於CPU的要求並不高,可以說,從最早期的電腦開始,就已經能夠支持C語言的運行。
你可能更關心的是搭建C語言編譯環境所需的條件。實際上,C語言的開發往往藉助微軟的Visual Studio軟體來進行編譯。安裝這個軟體,你就可以開始編寫代碼了。不同版本的Visual Studio對電腦配置的需求不同,最新版本當然需要最新的電腦操作系統支持,但是老版本的Visual Studio也可以在較老的操作系統上運行。
總的來說,對電腦硬體的要求並不嚴格,尤其是對CPU的要求並不高。通常,2GB的內存就足以滿足基本的需求。當然,這並不意味著你可以完全忽略硬體配置,操作系統與軟體版本的兼容性仍然是關鍵因素。
此外,對硬碟空間的要求也不高,一般安裝Visual Studio所需的空間在幾十GB左右,具體取決於你選擇安裝的組件。至於顯卡,對於C語言編程來說,基本的要求就是能夠支持基本的圖形界面,大部分現代顯卡都能滿足這一需求。
綜上所述,雖然C語言對於硬體配置的需求不高,但為了獲得更好的開發體驗,建議選擇配置較高的電腦,尤其是對於大型項目或者進行性能測試時,更高的硬體配置無疑會帶來更好的效果。
C. 如何用C語言獲取硬碟或主板或CPU的序列號
獲取CPU序列號要使用
匯編指令
比較麻煩
static
DWORD
g_eax;
//
存儲返回的eax
static
DWORD
g_ebx;
//
存儲返回的ebx
static
DWORD
g_ecx;
//
存儲返回的ecx
static
DWORD
g_edx;
//
存儲返回的edx
void
Executecpuid(DWORD
veax)
{
asm("cpuid"
:"=a"(g_eax),
"=b"(g_ebx),
"=c"(g_ecx),
"=d"(g_edx)
:"a"(g_eax));
}
int
isSupport;
void
GetSerialNumber(WORD
nibble[6])
{
Executecpuid(1);
//
執行cpuid,參數為
eax
=
1
isSupport
=
g_edx
&
(1<<18);
//
edx是否為1代表CPU是否存在序列號
if
(FALSE
==
isSupport)
//
不支持,返回false
{
return
;
}
Executecpuid(3);
//
執行cpuid,參數為
eax
=
3
memcpy(&nibble[4],
&g_eax,
4);
//
eax為最高位的兩個WORD
memcpy(&nibble[0],
&g_ecx,
8);
//
ecx
和
edx為低位的4個WORD
}
D. c語言 取得cpu日期 格式為YYYYMMDD
要獲取CPU的日期,可以使用C語言中的標准庫函數。示例代碼如下:
#include
#include
int main() {
time_t tm;
struct tm *t;
tm = time(NULL);
tm -= 86400;
t = localtime(&tm);
printf("%04d %02d %02d\n", (t->tm_year + 1900), t->tm_mon, t->tm_mday);
}
上述代碼首先包含必要的頭文件,然後定義變數tm和t。tm變數存儲當前時間,通過調用time(NULL)獲取當前時間。t變數用於存儲tm變數中包含的時間信息,通過調用localtime()函數獲取本地時間。
為了獲取前一日的日期,代碼將tm變數減去86400秒。86400秒相當於一天的時間。接著,調用localtime()函數將tm變數轉換為本地時間格式。
最後,使用printf()函數以特定格式輸出日期。其中,%04d表示四位數,不足四位時前面補零;%02d表示兩位數,不足兩位時前面補零。具體來說,%04d (t->tm_year + 1900)表示年份,%02d t->tm_mon表示月份,%02d t->tm_mday表示日期。
通過運行此代碼,可以輸出以YYYYMMDD格式表示的日期。