相同程式不同程序下實現資料共享

2021-08-02 01:26:25 字數 1538 閱讀 1580

格式:

#pragma comment(linker,"/section:mydata,rws")

#pragma data_seg("mydata")

int g_ipronum = -1;

#pragma data_seg()

說明:

以全域性變數來定義,即函體之外;

必需初始化,否則編譯器會把未初始化的變數放到.bss段中;

/section:自己的資料段名,rws,r為允許讀,w為允許寫,s為允許共享

第1步:新建控制台程式,**如下:

#include "stdafx.h"

#include

#pragma comment(linker,"/section:datashare,rws")

#pragma data_seg("datashare")

int g_valuea = 0; // 全域性變數,要賦值

#pragma data_seg()

int _tmain(int argc, _tchar* argv)

printf("%d:%d\n",&g_valuea,g_valuea);

system("pause");

return

0;}

第2步:執行debug中的exe,可以看到先後執行的兩個exe資料的變化

注意:程序間共享的是相同的實體地址,不同程序對應相同實體地址的虛擬位址並不相同,程序間不能共享指標,因為指標指向的是虛擬位址對應的資料,在另一程序中該虛擬位址並不指向原來的實體地址,例如

#include "stdafx.h"

#include

#pragma comment(linker,"/section:datashare,rws")

#pragma data_seg("datashare")

int *g_valuea = null; // 全域性變數,要賦值

#pragma data_seg()

int _tmain(int argc, _tchar* argv)

else

system("pause");

return

0;}

該程式執行結果如下

這是由於第一程序中虛擬位址對應的物理空間a變為11,而第二程序收到的該虛擬位址對應的該程序的a還是等於10

利用uORB機制實現資料在不同程序中通訊

uorb實際上是一種設計模式中的觀察者模式,用於實現一種一對多的依賴關係,讓多個觀察者 observer 同時監聽某一主題物件 subject 當這個主題物件 subject 的狀態發生變化時,會通知觀察者物件 observer 讓他們能夠自動更新自己。利用uorb實現資料在不同程序中的通訊主要包括...

通過execve實現不同程序間檔案描述符的共享

環境 vmware workstation centos 6.4 x86 64 程式的實現原理 在myexecve中得到檔案的描述符,通過execve函式,傳遞檔案的描述符到程式other中,隨後通過程式other替換程式myexecve,最後實現不同程序之間完成共享檔案描述符的操作。步驟 1 編寫...

WM COPYDATA實現程序間資料共享

出處 windows應用程式 核心程式設計 本文 於 程序通訊 使用wm copydata訊息通訊 3.4 使用wm copydata訊息通訊 對於少量資料可以用wm copydata方便地實現通訊。由於sendmessage 是阻塞的,只有接收方響應了訊息,sendmessage 才能返回,否則一...