Linux下的C语言编程——进程间通信——内存共享
来源:互联网 发布:网络招聘网 编辑:程序博客网 时间:2024/04/28 08:20
进程间通过共享内存来实现通信,完成父进程写入内存,子进程从内存读出并且把大写转换成小写
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>#define BUFFER_SIZE 2048void strupr(char *str){char *p;p = str;while(*p != '\0'){if(*p >= 'A' && *p <= 'Z'){*p = *p + 32;}p++;}}int main(){ pid_t pid; int shmid; char *shm_addr; char flag[]="parent"; char buff[BUFFER_SIZE]; if((shmid = shmget(IPC_PRIVATE,BUFFER_SIZE,0666)) < 0)// ask for memery { perror("shmget"); exit(1); } else printf("create share memory!\n"); if((pid = fork()) < 0 ) { perror("fork"); exit(1); } else if(pid == 0)//in son process { if((shm_addr = shmat(shmid,0,0)) == (void *)-1)//鏄犲皠 { perror("child:shmat\n"); exit(1); } else printf("child:Attach shared memory:%p\n",shm_addr); while(strncmp(shm_addr,flag,strlen(flag)))//鍏堝皢鏍囧織鎷峰叆鍐呭瓨 { printf("child: waiting for data...\n"); sleep(3); } strcpy(buff,shm_addr + strlen(flag));//鎷峰叆鍐呭瓨涓殑鏁版嵁strupr(buff); printf("child:shared memory:%s\n",buff); if(shmdt(shm_addr) < 0)//瑙i櫎鏄犲皠 { perror("child:shmdt"); exit(1); } else printf("child:detached shared memory\n"); } else { sleep(1); if((shm_addr = shmat(shmid,(void *)0,0)) == (void *)-1)//鐢宠鍐呭瓨 { perror("parent:shmat\n"); exit(1); } else { printf("parent attach share memory:%p\n",shm_addr); } sleep(1); printf("input string:\n"); fgets(buff,BUFFER_SIZE-strlen(flag),stdin);//杈撳叆鏁版嵁 strncpy(shm_addr+strlen(flag),buff,strlen(buff));//鎷疯礉鏁版嵁 strncpy(shm_addr,flag,strlen(flag));//鎷疯礉鏍囧織 if(shmdt(shm_addr) < 0)//瑙i櫎鏄犲皠 { perror("parent:shmdt"); exit(1); } else printf("parent: deattach shared memory\n"); waitpid(pid,NULL,0);//绛夊緟瀛愯繘绋嬬粨鏉? if(shmctl(shmid,IPC_RMID,NULL) == -1)//鍒犻櫎鐢宠鐨勫唴瀛? { perror("shmctl:IPC_RMID"); exit(1); } else printf("delete shared memory\n"); printf("finished!\n"); } return 0;}
0 0
- Linux下的C语言编程——进程间通信——内存共享
- Linux系统编程——进程间通信:共享内存
- Linux系统编程——进程间通信:共享内存
- Linux进程间通信 —— 共享内存(下)
- linux下C语言编程4-使用共享内存实现进程间通信
- linux下C语言编程4-使用共享内存实现进程间通信2
- Linux c 基于内存的进程通信—共享内存、共享队列(消息队列)
- Linux下的C语言编程——进程间通过signal函数通信简单操作
- linux 下C语言编程(2)——进程的创建,挂起,解挂,进程间通信
- Linux下的C语言编程——共享内存及有名管道的使用
- Linux进程通信——共享内存
- Linux----进程通信—共享内存
- Linux 进程通信—共享内存
- Linux下网络编程(3)——进程间通信(IPC),共享内存,传递结构体数据
- C语言进程间通信(四)——共享内存
- win32下进程间通信——共享内存
- win32下进程间通信——共享内存
- win32下进程间通信——共享内存
- C和C++中struct和typedef struct的异同
- 欢迎使用CSDN-markdown编辑器
- Emacs查看日志常用命令
- leetcode--- Minimum Size Subarray Sum
- 【Dongle】【Wondows】cmd命令提示符(一)
- Linux下的C语言编程——进程间通信——内存共享
- JAVA基础(2)——数据类型
- nginx配置好了不能访问
- 链表 带表头 循环
- 初探Django-mysite(5)
- 编译原理学习(一)词法分析器
- 基于STM32F103ZE芯片的RT-thread 操作系统移植
- 前端页面兼容性问题总结
- Z-Stack/ble OSAL 中OSAL按键事件的触发流程分析