210129階段三除錯 程序間通訊 共享記憶體

2021-10-18 07:33:06 字數 1571 閱讀 6490

2 共享記憶體

二、上課沒有聽懂或者沒有理解的地方

三、當天學習的收穫

訊息佇列可以接收指定型別的訊息,而不全是根據訊息的先後

系統預設最大訊息佇列個數 16個 msgmni 可修改

msgmax 乙個訊息裡面訊息的內容最大不超過8198

msgmnb 乙個佇列總的訊息內容的長度 16384

訊息佇列的刪除 msgctl(msgid,ipc_rmid,null);

typedef

struct msg_buf

char

* str =

"lisi"

;//str是變數,在棧區,存放指向ro段的位址,lisi是常量 在ro段,不可修改,

char str2[16]

=;//字元陣列,在棧區,laowng存在str2的位址中,可修改

//char* str1 = (char*)malloc(16); //在堆區 程式設計師開闢,可修改

strcpy

(str,

"hello");

//會報錯

strcpy

(str2,

"world"

);

gdb除錯

編譯時加上-g g++ -g main.cpp -o man,-g支援gdb除錯

gdb man 進入gdb除錯

l 或list 檢視

b 哪一行 在對應行打斷點

r 執行

p 要檢視的變數的值

n 下一步

q 退出

core 檔案除錯 1 工程較大時使用 2 想快速定位段錯誤

步驟編譯時 -g

設定core檔案大小 預設為0 不生成core檔案 ulimit -c unlimiter

執行程式 知道報段錯誤

共享記憶體速度在資料讀取上速度最快

跑起來才有核心,共享記憶體是核心裡面的一片記憶體,這片記憶體的大小由程式設計師決定,沒有大小限制

int shmid =

shmget

(1234

,1024

, ipc_creat)

;//開啟共享記憶體的鏈結

cout <<

"shmid"

<< shmid << endl;

char

* addr =

(char*)

shmat

(shmid,0,

0);//掛載 返回共享記憶體的位址

cout <<

"addr"

<< addr << endl;

strcpy

(addr,

"omo2007"

);

常量與區域性變數的儲存位置及區別,共享記憶體

210127階段三程序間通訊 訊息佇列

2 程序間通訊 二 上課沒有聽懂或者沒有理解的地方 三 當天學習的收穫 三階段學 系統程式設計 包括 程序 ipc 程序間通訊,如訊號 管道 訊息佇列 共享記憶體 訊號量 網路程式設計 包括 socket tcp ip,執行緒 多執行緒 執行緒池 opencv linux 一切皆檔案,通過檔案描述符...

程序間通訊 三 共享記憶體

共享記憶體是linux下倆程序通訊的一種方式,主要功能是讓兩個程序的虛擬位址都對映到同一片實體地址上,就可以通過這片實體地址進行資料的互動 mmap函式要求核心建立乙個新的虛擬記憶體區域,最好是從位址start開始的乙個區域,並將檔案描述符df指定的物件的乙個連續的片對映到這個新的區域,連續的物件片...

程序間通訊(三) 共享記憶體

共享記憶體區是最快的ipc形式。一旦這樣的記憶體對映到共享他的程序的位址空間,這些程序間資料傳遞不再涉及到核心,換句話說就是程序不再通過執行進入核心的系統呼叫來傳遞彼此的資料。共享記憶體示意圖 共享記憶體資料結構 struct shmid ds 相關函式shmget函式 建立共享記憶體 int sh...