C++建立两个内存缓冲区 通过多线程共享内存进行读写

发布网友 发布时间:2022-04-24 16:30

我来回答

2个回答

热心网友 时间:2023-10-22 18:08

一旦shmget创建成功了,或者attach成功了。调用shmget会给你返回一个地址的,然后通过引用这个指针直接读取数据。和其它的应用一样。

例如

#define PERM S_IRUSR|S_IWUSR

int main(int argc,char **argv)

{

int shmid;

char *p_addr,*c_addr;

if(argc!=2)

{

fprintf(stderr,"Usage:%s\n\a",argv[0]);

exit(1);

}

if((shmid=shmget(IPC_PRIVATE,1024,PERM))==-1)

{

fprintf(stderr,"Create Share Memory Error:%s\n\a",strerror(errno));

exit(1);

}

if(fork())

{

p_addr=shmat(shmid,0,0);

memset(p_addr,'\0',1024);

strncpy(p_addr,argv[1],1024);

exit(0);

}

else

{

c_addr=shmat(shmid,0,0);

printf("Client get %s",c_addr);

exit(0);

}

}
复制代码追问不对的,这是linux下的,而且不是多线程。

热心网友 时间:2023-10-22 18:08

共享内存:实现进程间通信的一种方式。希望访问该内存块的其他进程必须请求对它的访问,或由创建它的进程授予访问内存块的权限。共享内存被映射到使用它的每个进程的地址空间。当一个进程写共享内存,所有进程都立即知道写入的内容,并且可以访问。相当于函数间全局变量的关系类似。进程可能共享一个逻辑地址,也可以共享某些物理地址。
通常使用共享内存比使用管道或队列更简单更有效。共享内存块可用于保存大数据结构。可用于映射文件到内存,使得应用程序减轻了常规文件访问的I/O操作代价。
WIN32 环境创建和使用共享内存所需API:
CreateFileMapping() 创建一个文件映射对象,对文件无*。
OpenFileMapping() 获取映射对象的句柄
MapViewOfFile() 获取共享内存的起始地址

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com