共享内存
来源:互联网 发布:免费下载翻译软件 编辑:程序博客网 时间:2024/05/22 00:26
两个进程共享一块内存
server
#include<unistd.h>#include<stdlib.h>#include<stdio.h>#include<string.h>#include<sys/shm.h>#include "shm_com.h"int main(){ int running = 1; void *shared_memory = (void *)0; struct share_use_st *shared_stuff; int shmid; srand((unsigned int)getpid()); //创建一个可读可写的共享内存 shmid = shmget((key_t)1234,sizeof(struct share_use_st),0666|IPC_CREAT); if(shmid == -1){ fprintf(stderr,"shmget faild\n"); exit(EXIT_FAILURE); } //启用共享内存 shared_memory = shmat(shmid,(void *)0,0); if(shared_memory == (void*)-1){ fprintf(stderr,"shmat failed\n"); exit(EXIT_FAILURE); } //使用共享内存 shared_stuff = (struct share_use_st *)shared_memory; shared_stuff->written_by_you = 0; while(running){ if(shared_stuff->written_by_you){ printf("you wrote %s",shared_stuff->some_text); sleep(rand() % 4); shared_stuff->written_by_you = 0; if(strncmp(shared_stuff->some_text,"end",3) == 0){ running = 0; } } } //共享内存被剥离 if(shmdt(shared_memory) == -1){ fprintf(stderr,"shmdt failed\n"); exit(EXIT_FAILURE); } //删除共享内存 if(shmctl(shmid,IPC_RMID,0) == -1){ fprintf(stderr,"shmctl(IPC_RMID) failed\n"); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS);}
client
#include<unistd.h>#include<stdlib.h>#include<stdio.h>#include<string.h>#include<sys/shm.h>#include "shm_com.h"int main(){ int running = 1; void *shared_memory = (void *)0; struct share_use_st *shared_stuff; int shmid; char buffer[BUFSIZ]; //创建一个可读可写的共享内存 shmid = shmget((key_t)1234,sizeof(struct share_use_st),0666|IPC_CREAT); if(shmid == -1){ fprintf(stderr,"shmget faild\n"); exit(EXIT_FAILURE); } //启用共享内存 shared_memory = shmat(shmid,(void *)0,0); if(shared_memory == (void*)-1){ fprintf(stderr,"shmat failed\n"); exit(EXIT_FAILURE); } //使用共享内存 shared_stuff = (struct share_use_st *)shared_memory; while(running){ while(shared_stuff->written_by_you){ sleep(1); printf("waiting for client...\n"); } printf("Enter some text:"); fgets(buffer,BUFSIZ,stdin); strncpy(shared_stuff->some_text,buffer,TEXT_SZ); shared_stuff->written_by_you = 1; if(strncmp(buffer,"end",3) == 0){ running=0; } } //共享内存被剥离 if(shmdt(shared_memory) == -1){ fprintf(stderr,"shmdt failed\n"); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS);}
0 0
- 【共享内存】共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- java工具类1---一般是通过静态函数实现某个功能,而不需要涉及类的任何属性和变量,直接类名调用
- Spring源码分析【5】-Spring MVC处理流程
- HDU 2602Bone Collector(01背包)
- 欢迎使用CSDN-markdown编辑器---备忘
- 关于阻塞/非阻塞/同步/异步问题
- 共享内存
- Android NDK系列(3) --- ARM寄存器
- json C C++
- html, js 定时自动刷新本页
- 移植uboot第二步:分析uboot
- ubuntu 16.04.1设置静态ip、dns
- SQL注入攻击的防范
- ES6学习笔记2--解构赋值
- Android的activity双向跳转的详解