要使用函数已经学习完了,现在我们用代码实现一下共享内存,我们将接口放在我们的myshm.h的头文件里面,创建两个文件,使得两个文件连接一段共享内存:server.c 和 client.c ,在server.c中一直读取共享内存中的内容,我们在client.c中循环写入26个英文字母,这样当运行server.c的时候,就会在屏幕上显示英文字母,一次比上一次多显示一个。
myshm.h文件:
#ifndef _MYSHM_H_
#define _MYSHM_H
#include
#include
#include
#include
#define PATHNAME "."
#define PROJ_ID 0x6666
static int commShm(int size,int flag)
{
key_t _key = ftok(PATHNAME,PROJ_ID);
if(_key<0){
perror("look ftok");
return -1;
}
int shmid ;
if((shmid = shmget(_key,size,flag))<0){
perror("look shmget");
return -2;
}
return shmid;
}
int createShm(int size)
{
return commShm(size,IPC_CREAT|IPC_EXCL|0666);
}
int getShm(int size)
{
return commShm(size,IPC_CREAT);
}
int destoryShm(int shmid)
{
if(shmctl(shmid,IPC_RMID,NULL)<0)
{
perror("look shmctl");
return -1;
}
}
#endif
server.c文件:
#include
#include
#include
#include"myshm.h"
int main()
{
int shmid = createShm(4096);
char* addr = shmat(shmid,NULL,0);
sleep(2);
int i = 0;
while(i++<26){
printf("client say#%s\n",addr);
sleep(1);
}
shmdt(addr);
sleep(2);
destoryShm(shmid);
printf("myshm is destoryed\n");
return 0;
}
client.c文件:
#include
#include "myshm.h"
int main()
{
int shmid = getShm(4096);
char* addr = shmat(shmid,NULL,0);
int i = 0;
while(i<26)
{
addr[i] = 'A'+i;
i++;
addr[i] = '\0';
sleep(1);
}
sleep(1);
shmdt(addr);
sleep(1);
return 0;
}
以上就是我们的共享内存的总结。
Tip:限于编者水平,文章难免有缺漏之处,欢迎指正
如需转载请注明出处!