共享内存的使用
来源:互联网 发布:山东融资服务网络平台 编辑:程序博客网 时间:2024/04/29 17:11
http://download1.csdn.net/down3/20070529/29183222619.Chttp://download1.csdn.net/down3/20070529/29183246962.Chttp://download1.csdn.net/down3/20070529/29183246962.Chttp://download1.csdn.net/down3/20070529/29183246962.C
源代码是从别人的文章中抄过来的,不是原创,不过写得不错,主要是描述两个不同的进程从共享内存中存取数据的技术,我加了点分析:
第一个是写数据:
/***** testwrite.c *******/
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <unistd.h>
typedef struct{
char name[4];
int age;
} people;
main(int argc, char** argv)
{
int shm_id,i;
key_t key;
char temp;
people *p_map;
char* name = "/dev/shm/myshm2";
key = ftok(name,0);
if(key==-1)
perror("ftok error");
/*先用ftokR建一个key,再
圏pshmget,R建一WW共享内存区域*/
shm_id=shmget(key,4096,IPC_CREAT);
if(shm_id==-1)
{
perror("shmget error");
return;
}
/*将ル集W共享内存区附加到自己的内存段*/
p_map=(people*)shmat(shm_id,NULL,0);
temp='a';
for(i = 0;i<10;i++)
{
temp+=1;
memcpy((*(p_map+i)).name,&temp,1);
(*(p_map+i)).age=20+i;
}
/*写数据完ユk,将其从自己的内存段中“ R除”出去*/
if(shmdt(p_map)==-1)
perror(" detach error ");
}
/*读进程首先要得到那块内存块,这个时候,ftok根据文件名和ID创建的key就
很用了,步骤同创建是一样的*/
/********** testread.c ************/
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <unistd.h>
typedef struct{
char name[4];
int age;
} people;
main(int argc, char** argv)
{
int shm_id,i;
key_t key;
people *p_map;
char* name = "/dev/shm/myshm2";
key = ftok(name,0);
if(key == -1)
perror("ftok error");
shm_id = shmget(key,4096,IPC_CREAT);
if(shm_id == -1)
{
perror("shmget error");
return;
}
p_map = (people*)shmat(shm_id,NULL,0);
for(i = 0;i<10;i++)
{
printf( "name:%s/n",(*(p_map+i)).name );
printf( "age %d/n",(*(p_map+i)).age );
}
if(shmdt(p_map) == -1)
perror(" detach error ");
}
gcc -o testWriter -g testWriter.C
gcc -o testRead -g testRead.C
ipcs 察看创建的共享内存
注:事实上,ftok函数仅仅是根据文件名和ID生成一个起标识作用的key,根据《GNU Linux编程指南》说,Linux下实现这一函数还有点问题,不推荐用。于是我一般来说都是自己定义一个唯一的key,而不使用ftok函数。
- 共享内存的使用
- 共享内存的使用
- 共享内存的使用
- 共享内存的使用
- 共享内存的使用
- 共享内存的使用
- linux 共享内存的使用
- linux 共享内存的使用
- 关于共享内存的使用
- Qt共享内存的使用
- linux 共享内存的使用
- linux共享内存的使用--测试程序
- (内存共享)shmat函数的使用
- 共享内存和信号量的使用
- 共享内存使用的基本思路和接口
- linux共享内存与信号量的使用
- 共享内存的使用-shmget-shmat-shmdt
- eXtremeDB 共享内存使用时的注意事项
- 时间管理100招
- 那位大哥有域名查询的原代码 急急!!!!!!!!!!!!!!!!!!!!!!!!!11
- 刚刚接触Blog这东西~~也许我是土著人!
- 对session和cookie的一些理解
- A util class for DataGrid to Excel [Convert from Internet]
- 共享内存的使用
- oracle函数详解
- CRuntimeClass结构
- DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC宏
- CObject类
- 抗日铁军74军60周年祭
- java另一种获取当前系统的时间与日期
- 淺議c# 編程規則
- 在csdn模了一把好牌