C++ c++;将该值设置为特定地址
我想通过将变量值设置为特定的地址来实现两个程序之间的数据交换。数据可以分配到地址中,但当我更改其中一个程序中的值时,另一个程序仍然无法获得值 Program1.cpp将值设置为特定地址,Program2.cpp从该地址获取数据,两者都包含头文件“DataExchange.h” 程序1.cpp:C++ c++;将该值设置为特定地址,c++,pointers,memory-address,C++,Pointers,Memory Address,我想通过将变量值设置为特定的地址来实现两个程序之间的数据交换。数据可以分配到地址中,但当我更改其中一个程序中的值时,另一个程序仍然无法获得值 Program1.cpp将值设置为特定地址,Program2.cpp从该地址获取数据,两者都包含头文件“DataExchange.h” 程序1.cpp: #include <iostream> #include <windows.h> #include "DataExchange.h" using namespace std;
#include <iostream>
#include <windows.h>
#include "DataExchange.h"
using namespace std;
int main(int argc, char** argv) {
double val2 = 0;
double spd = 1;
double* ptr2 = (double*)speed_address;
cout << "Program1" << endl;
while(1){
DXSetvalue (Speed, spd);
val2 = DXGetvalue (Speed);
cout << "[speed] = " << spd++ << " [get speed] = " << val2 << " [address] = " << ptr2 << "\r" ;
Sleep(2000); // 2sec
}
return 0;
}
#包括
#包括
#包括“DataExchange.h”
使用名称空间std;
int main(int argc,字符**argv){
双val2=0;
双spd=1;
double*ptr2=(double*)速度_地址;
CUT程序在内核上运行,使用虚拟寻址,这意味着给定程序不能访问另一个地址空间。如果您想方便进程间通信,请考虑UNIX套接字。< /P>不能访问任意硬件地址。查找操作系统的进程间通信。程序有SEP。创建虚拟内存,因此一个程序中的地址
0x35153260
与另一个程序中的地址0x35153260
非常不同。操作系统对此负责。您非常非常不希望任何人弄乱您程序中的内存。如果可能的话,想象一下黑客的可能性吧!Linux进程可以共享内存。请参阅。另请参阅Linux函数shmget和mmap文档。这些例程映射共享内存区域,但每个进程的映射很可能不同,因此您不会使用“speed_address”之类的固定地址。相反,代码的每个进程都会询问操作系统共享内存的映射位置。另请参阅。您是否执行了任何操作拱门?
#include <iostream>
#include <windows.h>
#include "DataExchange.h"
using namespace std;
int main(int argc, char** argv) {
double t = 0;
double val = 0;
int* ptr = (int*)speed_address;
cout << "Program1 Node" <<endl;
init();
while(1){
t += 2;
val = DXGetvalue (Speed);
cout << "(" << t << "sec) " <<"[Speed] = " << val << " [blackboard address] = " << ptr << "\r";
Sleep(2000);
}
}
#include "stdio.h"
// The macro of the value ID
#define Speed 1
// Define of the address of the value
//#define speed_address 0x4a8048
//#define speed_address 0x00CFFB3C
#define speed_address 0x7ffef8
// Declaration
void setaddressValue (double* address, double d);
double getaddressValue (int name);
double* addressID (int name);
void DXSetvalue (int name, double d);
double DXGetvalue (int name);
void init();
// Definition
void setaddressValue (double* address, double d){
double* p = (double*)address;
*p = d;
//printf("p = 0x%x *p = %lf\n", p, *p);
}
double getaddressValue (int name){
double* pGet = addressID(name);
double value = *pGet;
//printf("pGet = 0x%x *pGet = %lf\n", pGet, *pGet);
return value;
}
double* addressID (int name){
switch (name){
case 1:
return (double*)speed_address;
default:
//cout << "not set the address" << endl;
printf("not set the address!!!\n");
}
}
/*program data*/
void DXSetvalue (int name, double d){
setaddressValue(addressID(name), d);
}
double DXGetvalue (int name){
return getaddressValue (name);
}
void init(){
double* p = (double*)speed_address;
*p = 0.5;
}