導航:首頁 > 操作系統 > linuxc語言定時

linuxc語言定時

發布時間:2024-05-08 15:13:44

linux下C語言有沒有定時調用的函數


你是指延遲函數還是定時調用,比如到11:12:13秒執行某個函數?

如果是延時函數用

usleep(usec);//微妙
sleep(sec);//秒

如果是定時執行的話,你只能開個線程或while,每隔1s判斷下當前系統時間,

structtm*ptm;
longts;
inty,m,d,h,n,s;

ts=time(NULL);
ptm=localtime(&ts);

y=ptm->tm_year+1900;//年
m=ptm->tm_mon+1;//月
d=ptm->tm_mday;//日
h=ptm->tm_hour;//時
n=ptm->tm_min;//分
s=ptm->tm_sec;//秒

照著上面的格式組成字元串進行判斷,到點了就執行就可以了

Ⅱ 在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;
}

Ⅲ linux 中實現延遲45分鍾後執行命令,寫了一段c程序,實現延遲,接下來,該如何執行命令呢,也就是shell

1、system(執行shell 命令)
相關函數 fork,execve,waitpid,popen
表頭文件 #include<stdlib.h>
定義函數 int system(const char * string);
函數說明 system()會調用fork()產生子進程,由子進程來調用/bin/sh-c
string來執行參數string字元串所代表的命令,此命令執行完後隨
即返回原調用的進程。在調用system()期間SIGCHLD 信號會被暫時
擱置,SIGINT和SIGQUIT 信號則會被忽略。
返回值 如果system()在調用/bin/sh時失敗則返回127,其他失敗原因返回-
1。若參數string為空指針(NULL),則返回非零值。如果system()調
用成功則者派最後會返回執行shell命令後的返回值,但是此返回值也有
可能為system()調用/bin/sh失敗所返回的127,因此最好能再檢查
errno 來確認執行成功。
附加說明 在編寫具有SUID/SGID許可權的程序時請勿使用system(),system()會
繼承環境變數,通畝嫌慧過環境變數可能會造成系統安全的問題。

例如:
#include<stdlib.h>
main()
{
system(「ls -al /etc/passwd /etc/shadow」); //換成./test.sh 可執行相關腳本
}

當然也可以用管道或exec函數族來調用迅答shell

Ⅳ linux系統 下 如何讓C語言sleep()函數等待時間小於1秒

sleep()函數大概只能精確到50ms左右,你用sleep(10)是肯定不行的,如果你要精確的定時的話可以使用QueryPerformanceFrequency()函數,用法為:
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus, dfFreq, dfTim;
QueryPerformanceFrequency(&litmp);
dfFreq = (double)litmp.QuadPart;// 獲得計數器的時鍾頻率
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart;// 獲得初始值
do
{
QueryPerformanceCounter(&litmp);
QPart2 = litmp.QuadPart;//獲得中止值
dfMinus = (double)(QPart2-QPart1);
dfTim = dfMinus / dfFreq;// 獲得對應的時間值,單位為秒
}while(dfTim<0.001);
其定時誤差不超過1微秒,精度與CPU等機器配置有關。

×××××××××××××××××××××××××

sleep()函數的中等待時間是以毫秒計算的,所以等待1秒就是sleep(1000),如果要讓等待時間小於一秒,那麼就讓傳入的參數小於1000就行了.
比如,等待0.1秒:
sleep(100);

閱讀全文

與linuxc語言定時相關的資料

熱點內容
java面試spring 瀏覽:143
得物程序員加班厲害嗎 瀏覽:958
h1z1東京伺服器地址 瀏覽:395
海賊王一番賞文件夾什麼樣 瀏覽:845
24bit高頻精品解壓音樂 瀏覽:181
api程序員遇到更新 瀏覽:298
程序員程序運行搞笑圖 瀏覽:772
秦思怎麼下載app 瀏覽:691
發抖音怎麼發自己的APP網站 瀏覽:362
androidinbitmap 瀏覽:774
lzma源碼使用 瀏覽:748
ibm伺服器湖南經銷商雲伺服器 瀏覽:991
正規模板建站配雲伺服器商家 瀏覽:876
安卓清楚緩存命令 瀏覽:380
汽車壓縮機電磁離合器損壞怎麼修 瀏覽:508
怎麼提取安卓軟體 瀏覽:597
單片機和主機高速傳文件 瀏覽:480
男生直發加密需要剃光頭嗎 瀏覽:826
qtdesignerlinux 瀏覽:433
命令的幾要素 瀏覽:934