#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define BUFFER_SIZE 2048
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) {
perror("shmget");
exit(1);
} else
printf("Create shared memory: %d.\n",shmid);
printf("Created shared memory status:\n");
system("ipcs -m");
if((pid=fork())<0) {
perror("fork");
exit(1);
}else if (pid==0) {
if ((shm_addr=shmat(shmid,0,0))==(void*)-1) {
perror("Child:shmat");
exit(1);
}else
printf("Child: Attach shared-memory: %p.\n",shm_addr);
printf("Child Attach shared memory status:\n");
system("ipcs -m");
while (strncmp(shm_addr,flag,strlen(flag))) {
printf("Child: Waiting for data...\n");
sleep(10);
}
strcpy(buff,shm_addr+strlen(flag));
printf("Child: Shared-memory: %s\n",buff);
if (shmdt(shm_addr)<0) {
perror("Child:shmdt");
exit(1);
}else
printf("Child: Deattach shared-memory.\n");
printf("Child Deattach shared memory status:\n");
system("ipcs -m");
}else{
sleep(1);
if ((shm_addr=shmat(shmid,0,0))==(void*)-1) {
perror("Parent:shmat");
exit(1);
}else
printf("Parent: Attach shared-memory: %p.\n",shm_addr);
printf("Parent Attach shared memory status:\n");
system("ipcs -m");
sleep(1);
printf("\nInput 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) {
perror("Parent:shmdt");
exit(1);
}else
printf("Parent: Deattach shared-memory.\n");
printf("Parent Deattach shared memory status:\n");
system("ipcs -m");
waitpid(pid,NULL,0);
if (shmctl(shmid,IPC_RMID,NULL)==-1) {
perror("shmct:IPC_RMID");
exit(1);
}else
printf("Delete shared-memory.\n");
printf("Child Delete shared memory status:\n");
system("ipcs -m");
printf("Finished!\n");
}
exit(0);
}
ipc.zip_ipc 进程通信
版权申诉
22 浏览量
2022-09-23
13:09:45
上传
评论
收藏 4KB ZIP 举报
林当时
- 粉丝: 95
- 资源: 1万+
最新资源
- XILINXFPGA源码Xilinxspratan3xcs100E(VGAPS2)
- XILINXFPGA源码XilinxSPARTAN-3E入门开发板实例
- XILINXFPGA源码XilinxSdramVerilog和VHDL版本文档
- 物联网智能家居方案-基于Nucleo-STM32L073&机智云(大赛作品,文档齐全,可直接运行)(文档加Matlab源码)
- XILINXFPGA源码XilinxISE9.xFPGACPLD设计源码
- 成都市地图含高新区(高新南区,高新西区),天府新区,东部新区虚拟行政区划
- XILINXFPGA源码XilinxEDK设计试验
- XILINXFPGA源码XilinxEDKMicroBlaze内置USB固件程序
- 基于 django 的视频点播后台管理系统源代码+数据库
- 基于Java的网上医院预约挂号系统的设计与实现(部署视频)-kaic.mp4
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0