#include
#include
#include
#include
#include
#include
#include
#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);
}