c 语言 共享内存,C语言共享内存-基本操作
#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 ",shmid);
if((pstr=shmat(shmid,NULL,0))==(void *)(-1))
{
perror("shmat error");
exit(1);
}
printf("连接共享内存成功,地址是%p ",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("请输入要写入的内容 ");
fgets(buffer,BUF_SIZE,stdin);
strcpy(pstr,buffer);
}
void r_shm(char *pstr)
{
printf("共享内存中的数据是 ");
printf("%s ",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 ",buf->shm_cpid);
}
#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 ",shmid); if((pstr=shmat(shmid,NULL,0))==(void *)(-1)) { perror("shmat error"); exit(1); } printf("连接共享内存成功,地址是%p ",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("请输入要写入的内容 "); fgets(buffer,BUF_SIZE,stdin); strcpy(pstr,buffer); } void r_shm(char *pstr) { printf("共享内存中的数据是 "); printf("%s ",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 ",buf->shm_cpid); }