读取c 文件图右
#include <stdio.h>
#include<sys/shm.h>
#include<unistd.h>
#include<stdlib.h>
#include "shmdata.h"
int main()
{
int runing=1;
struct share_use_st *shared;
void *shm=NULL;
int shmid;
shmid = shmget((key_t)1234,sizeof(struct share_use_st),IPC_CREAT |0644);
if(shmid == -1)
{
perror("shmget error");
exit(0);
} //创建内存
shm = shmat(shmid,NULL,0);
if((void *)-1== shm)
{
perror("shmat error");
exit(0);
}
printf("Shmat memory attached at %p\n",shm);
//映射内存
shared=(struct share_use_st *)shm;
shared->written=0;
while(runing)
{
if(shared->written !=0)
{
printf("you wrote:%s\n",shared->text);
sleep(rand() %3 );
shared->written = 0;
if(strncmp(shared->text,"end",3)==0)
{
runing=0;
}
}
else
{
sleep(1);
}
}
if(shmdt(shm)!=-1)
{
perror("shmdt fail");
}
if(shmctl(shmid,IPC_RMID,NULL)==-1)
{
perror("shmctl error");
}
return 0;
}
写入c文件图左
#include <stdio.h>
#include<sys/shm.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include "shmdata.h"
#define BUFFER_SIZE 2048
int main()
{
int runing=1;
struct share_use_st *shared;
void *shm=NULL;
int shmid;
char buffer[BUFFER_SIZE];
shmid = shmget((key_t)1234,sizeof(struct share_use_st),IPC_CREAT |0644);
if(shmid == -1)
{
perror("shmget error");
exit(0);
} //创建内存
shm = shmat(shmid,NULL,0);
if((void *)-1== shm)
{
perror("shmat error");
exit(0);
}
printf("Shmat memory attached at %p\n",shm);
//映射内存
shared=(struct share_use_st *)shm;
while(runing)
{
if(shared->written == 1)
{
sleep(1);
printf("waitting...\n");
}
printf("please input some text:\n");
fgets(buffer,BUFFER_SIZE,stdin);
buffer[strlen(buffer)-1]='\0';
strncpy(shared->text,buffer,strlen(buffer)+1);
shared->written = 1;
if(strncmp(buffer,"end",3)==0)
{
runing=0;
}
}
if(shmdt(shm)==-1)
{
perror("shmdt fail");
exit(-1);
}
sleep(1);
return 0;
}
结构体 .h 文件 作用--内存映射/内容传递作用
#define SIZE 2048
struct share_use_st
{
int written;
char text[SIZE];
};