格式:
#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 才能返回,否則一...