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); }
经验分享 程序员 微信小程序 职场和发展