Linux C程序管理之訊號 共享記憶體

2021-07-23 23:49:22 字數 3306 閱讀 2206

訊號的本質:

訊號是在軟體層上對中斷機制的一種模擬。

kill

,alarm

等函式

訊號種類:

訊號分為可靠訊號和不可靠訊號

,unix系統只定義了

32種訊號,

red_hat

支援64

種訊號,訊號大於

32<=64

的為可靠訊號,其餘為不可考訊號

我主要想給大家介紹的是下面的關於訊號的幾個函式

1.kill  用於傳送訊號給指定程序

標頭檔案:#include#include

函式原型:int kill(pid_t pid, int sig)

函式引數:kill可以將引數

sig送到

pid指定的程序

pid>0 ,

將訊號傳給程序標示碼為pid的程序

pid =0,將訊號傳給和目前程序相同程序組的所有程序

pid < 0,

將訊號傳給程序標示碼為pid絕對值的程序

pid = -1,將訊號傳給系統內所有程序

返回值:成功返回0,失唄返回-1

2.alarm 設定訊號傳送鬧鐘

標頭檔案:#include

函式原型:unsigned int alarm (unsigned int seconds)

函式引數:seconds為

0,鬧鐘取消,

返回值:返回之前剩餘秒數,如果之前沒設鬧鐘,返回0;

3.signal 傳送訊號給指定程序

標頭檔案:#include

函式原型:

void(*signal(int signum,void (*handler)(int)))(int) == signal(int signum,sighandler_t handler)

函式引數:handler:寫函式名,

signum

:siging

,sigqouit等等

返回值:返回之前剩餘秒數,如果之前沒設鬧鐘,返回0

4.pause  讓程序暫停,直到訊號出現

標頭檔案:#include

函式原型:int pause(void)

返回值:-1

下面是個例子用到了2,3,4三個函式

#include#includevoid handler()

int main()

pause();

exit(0);

}

共享記憶體:

1.shmget  在核心中建立共享記憶體

標頭檔案:#include#include

函式原型:int shmget(key_t key,int size,int shm***)

引數:key:鍵值,

ipc_private

私有鍵值

size:建立的記憶體大小

shm***:標誌,同

open

()的許可權位

返回值:

成功:返回共享記憶體識別符號,失敗-1;

2. shmat: 對映共享記憶體,對映到各自記憶體空間

標頭檔案: #include#include#include

函式原型:void *shmat(int shmid,const void *shmadder,int shm***)

引數:shmid:記憶體識別符號,

shmadder

核心進行自動分配,shm***,

shm_rdonly

唯讀,為

0 表示可讀寫。

3.shmdt    撤銷共享記憶體的對映

函式原型:int shmdt (const void * shmadder)

引數:    shmadder:被對映的共享記憶體位址

返回值:成功0,出錯-1

共享記憶體實現步驟

建立共享記憶體->對映共享記憶體

->

撤銷對映操作

#include #include #include #include #include #include #include #include "shm_com.h"

int main(void)

/*對映共享記憶體*/

shared_memory=shmat(shmid,(void *)0,0);

if(shared_memory==(void *)-1)

printf("memory attached at %x\n",(int)shared_memory);

/*讓結構體指標指向這塊共享記憶體*/

shared_stuff=(struct shared_use_st *)shared_memory;

/*控制讀寫順序*/

shared_stuff->written_by_you=0;

/*迴圈的從共享記憶體中讀資料,直到讀到「end」為止*/

while(running)

}} /*刪除共享記憶體*/

if(shmdt(shared_memory)==-1)

exit(exit_success);

}

#include #include #include #include #include #include #include #include "shm_com.h"

int main(void)

/*對映共享記憶體*/

shared_memory=shmat(shmid,(void *)0,0);

if(shared_memory==(void *)-1)

printf("memory attached at %x\n",(int)shared_memory);

/*讓結構體指標指向這塊共享記憶體*/

shared_stuff=(struct shared_use_st *)shared_memory;

/*迴圈的向共享記憶體中寫資料,直到寫入的為「end」為止*/

while(running)

printf("ener some text:");

fgets(buffer,bufsiz,stdin);

strncpy(shared_stuff->some_text,buffer,text_sz);

shared_stuff->written_by_you=1;

if(strncmp(buffer,"end",3)==0)

}/*刪除共享記憶體*/

if(shmdt(shared_memory)==-1)

exit(exit_success);

}

Linux C 程序間的訊號通訊

1 訊號通訊 核心中存在64種訊號,即linux 核心可以傳送64種訊號,命令 kill l 可以檢視 a 訊號的傳送 kill raise alarm kill pid t pid,int sig raise int sig 等價於 kill getpid int sig 即發給自己 附 終止程序...

linuxC多程序通訊systemv 共享記憶體

共享記憶體通訊限制 舉例 獲取共享記憶體物件的id int shmget key t key,size t size,int shm 對映共享記憶體 void shmat int shmid,const void shmaddr,int shm 解除記憶體對映 int shmdt const voi...

LINUX C 語言 程序管理(一)

子程序和父程序的開始與結束 子程序結束的時候會向父程序傳送訊號,讓父程序幫助 程序 父程序先結束的時候,子程序會過繼到init程序下 即指定init程序為新的父程序 如果父程序因為各種原因沒有收到子程序傳送的訊號,則無法 子程序的資源,子程序會成為殭屍程序 子程序與父程序的資源 程序的記憶體區劃分 ...