訊號燈和共享記憶體機制實現程序通訊

2021-08-20 02:08:33 字數 951 閱讀 9699

父程序建立子程序互相通訊,父程序從指定檔案中每次讀取一行放入共享記憶體中,子程序將共享記憶體的內容寫入另乙個檔案末尾。由於子程序是無限迴圈,父程序結束前必須殺死子程序,程序結束時會釋放掉等待的訊號量,否則再次執行程式時會直接在建立子程序之前阻塞。
#include #include #include #include #include #include #include #include using namespace std;

#define shmkey 18002 /* 共享記憶體關鍵字 */

#define size 1024 /* 共享記憶體長度 */

#define semkey1 19003 /* 訊號燈組1關鍵字 */

#define semkey2 19004 /* 訊號燈組2關鍵字 */

void syserr(string mes)

int creatsem(key_t key)

static void semcall(int,int);

void semwait(int sid)

void semsignal(int sid)

static void semcall(int sid,int op)

int main()

}ifstream in("/users/mzy/clionprojects/sharememory/input.txt");

semwait(sid1);

//如果沒有讀完檔案內容則不會跳出迴圈

while(in.getline(segaddr,size))

semsignal(sid1);

//讀檔案結束,1s後殺死子程序

sleep(1);

kill(i,sigkill);

return 0;

}

預習訊息佇列,共享記憶體,訊號燈

1 對訊息佇列的操作有下面三種型別 1 開啟或建立訊息佇列。訊息佇列的核心持續性要求每個訊息佇列都在系統範圍內對應唯一的鍵值,所以,要獲得乙個訊息佇列的描述字,只需提供該訊息佇列的鍵值即可。注 訊息佇列描述字是由在系統範圍內唯一的鍵值生成的,而鍵值可以看作對應系統內的一條路經。2 讀寫操作。訊息讀寫...

IPC 共享記憶體與訊號燈的基本函式整理

ipc inter process communication,程序間通訊 共享記憶體與訊號燈 include include key t ftok const char pathname,int proj id 常用方法 key t key ftok a if 1 key 使用key開啟或建立ip...

Linux下基於訊號和共享記憶體實現程序池

為了實現程序池,我們主要需要考慮以下幾個點 1 如何進行程序間通訊 2 程序間如何共享資料 關於程序間通訊,有很多種方式,比如說管道,訊號,socket,共享記憶體,訊息佇列等,本文主要基於訊號和共享記憶體來實現程序間通訊。對應linux的函式原型為 int kill pid t pid,int s...