- 浏览: 722747 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1043)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (52)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (64)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
最新评论
SharedMemory.h
SharedMemory.cpp
testSharedMemory.cpp
#ifndef SHAREDMEMORY_H #define SHAREDMEMORY_H namespace Utility { //获取shmId int initShm(const char* fileName); //清除shmId int closeShmMessage(int shmId); //向shmId写数据 int writeShmMessage(int shmId,const void* msg,int msgLen); //从shmId读数据 void* readShmMessage(int shmId); }//end of namespace Utility #endif // SHAREDMEMORY_H
SharedMemory.cpp
#include "SharedMemory.h" #include <sys/types.h> #include <sys/shm.h> #include <unistd.h> #include <string.h> #include <fcntl.h> namespace Utility { /* 获取shmId */ int initShm(const char* fileName) { if(access(fileName,R_OK)!=0) { int fd = open(fileName,O_RDWR|O_CREAT|O_APPEND); close(fd); } key_t key = ftok(fileName,0); if(key==-1){ return -1; } return shmget(key,4096,IPC_CREAT); } /* 清除shmId */ int closeShmMessage(int shmId) { return shmctl(shmId,IPC_RMID,0); } /* 向shmId写数据 */ int writeShmMessage(int shmId,const void* msg,int msgLen) { void *pmessage = shmat(shmId,NULL,0); memcpy(pmessage, msg, msgLen); if(shmdt(pmessage)==-1){ return -1; } return 0; } /* 从shmId读数据 */ void* readShmMessage(int shmId) { return shmat(shmId,NULL,0); } }//end of namespace Utility
testSharedMemory.cpp
#include <iostream> #include <string.h> #include <unistd.h> #include <sys/wait.h> #include <stdlib.h> #include "SharedMemory.h" using namespace std; using namespace Utility; struct Message { int m; char str[32]; }; static const char* g_file = "testShm"; int main() { Message msg1; msg1.m = 1; strcpy(msg1.str,"hello"); int shmId = initShm(g_file); if(shmId<0) { cout << "shmget error" << endl; return -1; } pid_t pid; if((pid=fork())==0) { writeShmMessage(shmId,&msg1,sizeof(msg1)); exit(0); } if(waitpid(pid,NULL,0)!=pid) { cout << "wait error" << endl; return -1; } Message* msg2 = (Message* )readShmMessage(shmId); cout << msg2->m << "," << msg2->str << endl; cout << "clear:" << closeShmMessage(shmId) << endl; return 0; } 1,hello clear:0
发表评论
-
滑动窗口与拥塞控制
2017-09-29 14:47 729滑动窗口:用作流量控制: 1.发送端和接收端各维护一个独立的发 ... -
rawsocket发送tcp包
2017-09-25 11:52 931testTcp.h #ifndef TESTTCP_H ... -
柔性数组
2017-09-20 09:53 448#include <iostream> #i ... -
rawsocket发送dns包
2017-09-14 15:18 568#include <stdio.h> #in ... -
rawsocket发送icmp包
2017-09-06 09:54 620#include <stdio.h> #in ... -
netfilter
2016-10-04 20:31 448http://blog.chinaunix.net/uid-2 ... -
gdb的简单使用
2016-09-19 15:18 385注意编译的时间加上-g参数 1.调试运行 gdb a.out ... -
TCP各状态的意义
2016-03-01 14:06 389各个状态的意义如下: LISTEN - 侦听来自远方TCP端 ... -
log
2015-03-30 17:42 413log.h #ifndef __LOG_H__ #def ... -
TIMEWAIT与CLOSEWAIT
2015-03-17 11:32 614http://blog.csdn.net/kobejayand ... -
TcpClient
2015-01-16 17:46 441TcpClient.h #ifndef TCPCLIENT ... -
信号量
2014-09-26 10:20 649#include <semaphore.h> ... -
记录锁
2014-09-11 16:32 403#include <errno.h> #in ... -
popen
2014-09-06 14:50 582#include <stdio.h> #in ... -
大小端存储
2014-09-05 09:29 567#include <stdio.h> i ... -
条件变量(cond)
2014-09-01 11:02 828#include <pthread.h> # ... -
读写锁
2014-09-01 10:33 669#include <pthread.h> # ... -
trylock
2014-09-01 10:07 641#include <pthread.h> # ... -
线程分离
2014-09-01 10:00 658http://www.cnblogs.com/mydomain ... -
线程返回值传出
2014-08-31 09:56 498#include <pthread.h> # ...
相关推荐
共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存...
ShareMemLib将共享内存代码封装成lib,定义了发送者和监听者 两个进程在实例化ShareMemory时指定相同的map,并指定当前为发送者或监听者 发送者负责发送消息,监听者负责接受消息(监听者务必实现接受消息处理方法) ...
要使用共享内存,应该有如下步骤: 1.开辟一块共享内存 shmget() 2.允许本进程使用共某块共享内存 shmat() 3.写入/读出 4.禁止本进程使用这块共享内存 shmdt() 5.删除这块共享内存 shmctl()或者命令行下ipcrm ftok...
C#共享内存的实例,附源码和工程文件。 网上有C#的共享内存类,不过功能太简单了。 故,对此进行了改进。通过利用共享内存的一部分空间来存储当前内存中存储的数据信息(count和length),完成了对内存读写功能的...
C#操作共享内存读写工程、C#操作共享内存读写工程、C#操作共享内存读写工程
程序间共享内存,用于数据交换,非常强大的示例,解决你进程间数据共享的问题 不错,解决了传输问题,可以共享N个字符串。整数等类型 改造一下,进程通讯就可以用了 我用它做串口数据共亭。。不错。。 挺好用的我...
VS2005 C# 共享内存 源代码
在使用共享内存的程序异常退出时,由于没有释放掉共享内存,在调试时会出现错误。您可以使用shell命令来查看与释放已经分配的共享内存,下面将详细说明如何进行查看和释放分配的共享内存的方法。
C++共享内存进程间通信 FileMapping用于进程间快速通信
利用共享内存实现进程间的通信,可用于操作系统的教学。(原创)
共享内存,简单易懂的学习共享内存, 是学习共享内存的入门
共享内存方式实现进程间通信。详细看我的博客:http://blog.csdn.net/pengguokan/article/details/8921346
C 共享内存 2个程序之间传输数据。 内部有2个C文件,x1.c是共享内存的读取程序,x2.c是共享内存的写入程序
共享内存 共享内存数据库 数据库 Linux技术文档 Linux 任务书 共享内存 共享内存数据库 数据库 Linux技术文档 Linux 任务书
此代码进行了共享内存的通信演示。 此演示非常简单,只是演示如何使用,没有考虑性能、方式等,如果需要拿到真正的代码中使用,则需要考虑其它额外的工作,比如方式、效率等。 使用vc6.0
易语言读写共享内存例程源码.rar
QT共享内存QSharedMemory读写例子
易语言读写共享内存例程源码,读写共享内存例程,CreateFileMappingA,MapViewOfFile,UnmapViewOfFile,CloseHandle,OpenFileMappingA
代码实现了共享内存和信号量的结合,实现进程间通信及其同步问题。通过此代码可以理解共享内存及信号量基本函数的使用及实现原理。
Qt共享内存实现进程间通信(QSharedMemory) 源代码