A. 在linux環境下c語言中如何讓while循環執行固定的時間如200毫秒
...
樓上的想讓你的程序變成悲劇...linux下sleep函數的參數是秒為單位的...休眠200秒...
睡眠小於1秒用usleep,單位是毫秒...
所以,樓上的程序把sleep改成usleep就可以 了...
while(1)
{
/* any thing you want to do*/
usleep(200);
}
另外我覺得你要說的好像是:希望while循環執行某些操作,執行時間到200毫秒之後退出while循環?
最簡單是用間隔定時器...
你查下這幾個函數:timer_create,timer_settime等。
時間設置比較精確,可以設置一段時間間隔,過了指定的時間之後,會給當前進程發送一個SIGALRM信號,你while循環的條件,可以在SIGALRM的信號處理函數裡面修改,這樣,到時間之後while就可以退出了....
這樣寫:
//...
...
...
static char flag=1
...
int main(void)
{
signal(SIGALRM, timer_handler);
/*
申請並且設置間隔定時器的間隔
*/
while(flag)
{
/*循環內的操作*/
}
...
return 0;
}
void timer_handler(unsigned int signal)
{
flag=0;
}
B. Linux 裡面iostat命令作用是什麼
iostat 可以提供更豐富的IO性能狀態數據
iostat提供幾個用於定製輸出的開關。最有用的有:
-c 只顯示CPU行
-d 顯示設備(磁碟)使用狀態
-k 以千位元組為單位顯示磁碟輸出
-t 在輸出中包括時間戳
-x 在輸出中包括擴展的磁碟指標
rrqm/s: 每秒進行 merge 的讀操作數目。
wrqm/s: 每秒進行 merge 的寫操作數目。
r/s: 每秒完成的讀 I/O 設備次數。
w/s: 每秒完成的寫 I/O 設備次數。
rsec/s: 每秒讀扇區數。
wsec/s: 每秒寫扇區數。
rkB/s: 每秒讀K位元組數。是 rsect/s 的一半,因為每扇區大小為512位元組。(需要計算)
wkB/s: 每秒寫K位元組數。是 wsect/s 的一半。(需要計算)
avgrq-sz: 平均每次設備I/O操作的數據大小 (扇區)。
avgqu-sz: 平均I/O隊列長度。
await: 平均每次設備I/O操作的等待時間 (毫秒)。
svctm: 平均每次設備I/O操作的服務時間 (毫秒)。
%util: 一秒中有百分之多少的時間用於 I/O 操作。
關於Merge的解釋:當系統調用需要讀取數據的時 候,VFS將請求發到各個FS,如果FS發現不同的讀取請求讀取的是相同Block的數據,FS會將這個請求合並Merge
await:每一個IO請求的處理的平均時間(單位是毫秒)。這里可以理解為IO的響應時間,一般地系統IO響應時間應該低於5ms,如果大於10ms就比較大了。
%util:在統計時間內所有處理IO時間,除以總共統計時間。例如,如果統計間隔1秒,該 設備有0.8秒在處理IO,而0.2秒閑置,那麼該設備的%util = 0.8/1 = 80%,所以該參數暗示了設備的繁忙程度。一般地,如果該參數是100%表示設備已經接近滿負荷運行了(當然如果是多磁碟,即使%util是100%,因 為磁碟的並發能力,所以磁碟使用未必就到了瓶頸)。
C. linux下,記錄響應時間的腳本,精確到毫秒ms
gettimeofday(取得目前的時間)
相關函數
time,ctime,ftime,settimeofday
表頭文件
#include <sys/time.h>
#include <unistd.h>
定義函數
int gettimeofday ( struct timeval * tv , struct timezone * tz )
函數說明
gettimeofday()會把目前的時間有tv所指的結構返回,當地時區的信息則放到tz所指的結構中。
timeval結構定義為:
struct timeval{
long tv_sec; /*秒*/
long tv_usec; /*微秒*/
};
timezone 結構定義為:
struct timezone{
int tz_minuteswest; /*和Greenwich 時間差了多少分鍾*/
int tz_dsttime; /*日光節約時間的狀態*/
};
上述兩個結構都定義在/usr/include/sys/time.h。tz_dsttime 所代表的狀態如下
DST_NONE /*不使用*/
DST_USA /*美國*/
DST_AUST /*澳洲*/
DST_WET /*西歐*/
DST_MET /*中歐*/
DST_EET /*東歐*/
DST_CAN /*加拿大*/
DST_GB /*大不列顛*/
DST_RUM /*羅馬尼亞*/
DST_TUR /*土耳其*/
DST_AUSTALT /*澳洲(1986年以後)*/
返回值
成功則返回0,失敗返回-1,錯誤代碼存於errno。附加說明EFAULT指針tv和tz所指的內存空間超出存取許可權。
範例
#include<sys/time.h>
#include<unistd.h>
main(){
struct timeval tv;
struct timezone tz;
gettimeofday (&tv , &tz);
printf(「tv_sec; %d\n」, tv,.tv_sec) ;
printf(「tv_usec; %d\n」,tv.tv_usec);
printf(「tz_minuteswest; %d\n」, tz.tz_minuteswest);
printf(「tz_dsttime, %d\n」,tz.tz_dsttime);
}
執行
tv_sec: 974857339
tv_usec:136996
tz_minuteswest:-540
tz_dsttime:0
D. linux 怎麼精確到毫秒
date +%F-%H-%M.%N用這個命令就行,執行後:2016-11-18-13-16.608277702
E. Linux系統中tracert命令使用詳解
Linux系統中Tracert命令用來顯示數據包到達目標主機是所經過的路徑。下面由我為大家整理了linux系統中tracert命令使用詳解,希望對大家有幫助!
Linux系統中tracert命令使用詳解
Tracert命令用來顯示數據包到達目標主機所經過的路徑,並顯示到達每個節點的時間。命令功能同Ping類似,但它所獲得的信息要比Ping命令詳細得多,它把數據包所走的全部路徑、節點的IP以及花費的時間都顯示出來。該命令比較適用於大型網路。
命令格式:
tracert IP地址或主機名 [-d][-h maximumhops][-j host_list] [-w timeout]
參數含義:
-d 不解析目標主機的名字;
-h maximum_hops 指定搜索到目標地址的最大跳躍數;
-j host_list 按照主機列表中的地址釋放源路由;
-w timeout 指定超時時間間隔,程序默認的時間單位是毫秒。
linux系統中tracert命令用法
tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name
如果不使用參數,將顯示連接情況,如圖2-23所示。
補充:linux系統中tracert命令原理
tracert命令也稱作路由跟蹤命令,用於確定IP資料庫包訪問目標所採取的路徑,通過IP生成時間(TTL)欄位和ICMP錯誤信息來確定,從個網路到主機之間的網路狀況。
tracert命令原理與ping命令為相似,都是通過向目標發送數據包,並通過數據包響應及丟失情況,從而判斷本地與目標主機之間的網路狀況,所不同的是tracert命令能夠反映出網路中各個路由節點信息,以及網路狀況,並且可以用以跟蹤路由節點,以及監控伺服器狀況等作用。