您的位置:首页 > 编程语言 > C语言/C++

C语言共享内存-基本操作

2013-08-05 20:14 351 查看
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <error.h>
#include <string.h>
#define SIZE 4096
#define BUF_SIZE 128

void w_shm(char *pstr);
void r_shm(char *pstr);
void del_shm(int shmid);
void display_shm(int shmid);

int main(int argc,char **argv)
{
key_t key=get_key();
int shmid;
char *pstr;
shmid=shmget(key,SIZE,IPC_CREAT|0600);
if(shmid==-1)
{
perror("shmget error");
exit(1);
}
printf("创建共享内存成功,shmid=%d\n",shmid);
if((pstr=shmat(shmid,NULL,0))==(void *)(-1))
{
perror("shmat error");
exit(1);
}
printf("连接共享内存成功,地址是%p\n",pstr);
w_shm(pstr);
display_shm(shmid);
//del_shm(shmid);
//shmdt(pstr);
return 0;
}

int get_key()
{
int key;
key=ftok(".",'k');
return key;
}

void w_shm(char *pstr)
{
char buffer[BUF_SIZE];
printf("请输入要写入的内容\n");
fgets(buffer,BUF_SIZE,stdin);
strcpy(pstr,buffer);
}

void r_shm(char *pstr)
{
printf("共享内存中的数据是\n");
printf("%s\n",pstr);
}

void del_shm(int shmid)
{
if(shmctl(shmid,IPC_RMID,0)==-1)
{
perror("rm shm error");
exit(1);
}
}

void display_shm(int shmid)
{
struct shmid_ds *buf;
buf=(struct shmid_ds *)malloc(sizeof(struct shmid_ds));
if(shmctl(shmid,IPC_STAT,buf)==-1)
{
perror("shmctl error");
exit(1);
}
printf("shm_cpid=%d\n",buf->shm_cpid);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: