1.訊號產生
linux下c語言程式設計——訊息管理
1.posix無名訊號量(linux只實現了無名訊號量)
#includeint sem_init(sem_t *sem,int pshared,unsigned int value);//建立乙個訊號燈,並初始化其值為value。pshared決定了訊號能夠在幾個程序間的共享,由於目前linux還沒有實現程序間共享訊號燈,所以這個值只能取0
int sem_destroy(sem_t *sem);//用來刪除訊號燈
int sem_wait(sem_t *sem);//呼叫將阻塞程序,直到訊號燈值》0,這個函式返回的時候自動將訊號燈的值減一。
int sem_trywait(sem_t *sem);//和sem_wait相同,但不阻塞,當訊號燈的值為0的時候返回eagain,表示以後重試
int sem_post(sem_t *sem);//和sem_wait相反,將訊號燈內同+1同時發出訊號喚醒等待的程序.
int sem_getvalue(sem_t *sem);//得到訊號燈的值
2.system v訊號量
#include#include#includestruct sembuf
key_t ftok(char *pathname,char proj);//根據pathname和proj來建立乙個關鍵字
int semget(key_t key,int nsems,int sem***);//建立乙個訊號量,成功返回訊號id,key是乙個關鍵字,,可以是用ftok建立的也可以使ipc_private表明由系統選用乙個關鍵字,nsems表明我們建立的訊號的個數.sem***是建立的許可權標誌,和我們建立乙個檔案的標誌相同。
int semctl(int semid,int semnum,int cmd,union semun arg);//對訊號量進行一系列控制,semid是要操作的訊號標誌,semnum是訊號的個數,cmd是操作的命令,經常用到的兩個值是setval(設定訊號量的值)和ipc_rmid(刪除訊號燈),arg是乙個給cmd的引數。
int semop(int semid,struct sembuf *spos,int nspos);//對訊號進行操作的函式,spos是乙個運算元組表明要進行什麼操作,nspos表明陣列的個數,如果sem_op>0,那麼操作將sem_op加入訊號量的值中並喚醒等待訊號增加的程序,如果sem_op=0,當訊號量的值是0的時候,函式返回,否則阻塞直到訊號量的值為0,如果小於0,函式判斷訊號量的值加上這個負值,如果結果為0則喚醒等待訊號量為0的程序,如果小於0函式阻塞,如果大於0,那麼從訊號靚麗減去這個值並返回。
linux下基於C語言的訊號程式設計例項
include include include include include void sig handler int sig no,siginfo t info,void ctext else return 常用訊號列表 sigint ctrl c sigquit ctrl sigpipe 管道...
linux下的C語言開發(訊號處理)
訊號處理是linux程式的乙個特色。用訊號處理來模擬作業系統的中斷功能,對於我們這些系統程式設計師來說是最好的乙個選擇了。要想使用訊號處理功能,你要做的就是填寫乙個訊號處理函式即可。一旦程序有待處理的訊號處理,那麼程序就會立即進行處理。cpp view plain copy print?includ...
linux下的C語言開發(訊號處理)
訊號處理是linux程式的乙個特色。用訊號處理來模擬作業系統的中斷功能,對於我們這些系統程式設計師來說是最好的乙個選擇了。要想使用訊號處理功能,你要做的就是填寫乙個訊號處理函式即可。一旦程序有待處理的訊號處理,那麼程序就會立即進行處理。cpp view plain copy include incl...