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\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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值