#include<stdio.h> #include<time.h> #include<stdlib.h> #include<sys/ipc.h> #include<sys/shm.h> #include<string.h> #include <fcntl.h> #include <sys/types.h> #include<unistd.h> struct shared_msg{ char text[BUFSIZ]; int update; }; int num1,num2,i=0,count=0; static int shmid; char str1[100]={0},str2[100]={0},temp; struct shared_msg *msg=NULL; int main(){ //创建共享内存 shmid=shmget((key_t)1234,sizeof(struct shared_msg),IPC_CREAT); if(shmid<0){printf("错误,key 对应的共享内存已存在");exit(-1);} //映射共享内存 msg=(struct shared_msg *)shmat(shmid,0,0); if( msg < (struct shared_msg *)0){ printf("映射内存出错!\n"); exit(-2);} while(1){ while(msg->update==1||strcmp(msg->text,"end")==0){ //在屏幕上打印计算式 if(strcmp(msg->text,"end")==0){ printf("%s\n",msg->text); sprintf(msg->text,"over");return 0;} else {printf("%s\n",msg->text);} //获取第一个数据 if(msg->text[1]!='+'){ memcpy(str1,msg->text,2); str1[2]='\0';} else { memcpy(str1,msg->text,1); str1[1]='\0';} num1 = atoi(str1); //获取第二个数据 if(msg->text[1]!='+'){memcpy(str2,msg->text+3,2);} else {memcpy(str2,msg->text+2,2);} str2[2]='\0'; num2=atoi(str2); //把计算后的结果写入缓冲区 num1=num1+num2; sprintf(msg->text,"%d",num1); msg->update=0; } } return 0; }
时间: 2024-04-03 11:31:31 浏览: 97
操作系统进程同步实验报告.doc
这段代码是一个使用共享内存实现的简单计算器程序。它创建了一个共享内存区域,在进程间共享数据。其中 struct shared_msg 结构体定义了共享内存中的数据结构,包含一个字符串和一个整数,分别表示计算式和是否需要更新的标志。程序通过循环读取共享内存中的数据,当需要更新数据时,获取计算式中的两个数值,将它们相加后写入共享内存中,等待另一个进程读取。程序可以通过在计算式中输入 "end" 命令来结束运行。
阅读全文