进程间通信之共享内存

来源:互联网 发布:python课程 编辑:程序博客网 时间:2024/05/18 02:16
#include<iostream>#include<stdio.h>#include<unistd.h>#include<sys/wait.h>#include<sys/shm.h>#include<stdlib.h>using namespace std;int main(int argc,char *argv[]){  if(argc!=2) {printf("请输入参数\n");exit(-1);}  int n=atoi(argv[1]),shmid;  if(n<0) {printf("请输入正数\n");exit(-1);}  printf("%d\n",n);  int *p=new int[n];  shmid=shmget((key_t)1234,100000,0666 | IPC_CREAT);  if(shmid<0) {printf("共享内存失败\n");exit(-1);}  pid_t pid=fork(); if(pid<0) {printf("进程创建失败");exit(-1);}  else if(pid==0)  {       p=(int *)shmat(shmid,NULL,0);      if(p==(void *) -1) {printf("子进程连接共享内存失败\n");exit(-1);}      p[0]=0;p[1]=1;      for(int x=2;x<n;x++)  p[x]=p[x-1]+p[x-2];     if(shmdt(p)<0) printf("子进程删除共享内存失败\n");      printf("子进程执行完毕\n");      exit(0);  }  else     {      p=(int *)shmat(shmid,NULL,0);      if(p==(void *) -1) {printf("父进程连接共享内存失败\n");exit(-1);}      wait(NULL);      printf("执行成功,输出子进程结果:\n");      for(int x=0;x<n;x++) printf("%d ",p[x]);      if(shmdt(p)<0) printf("父进程删除共享内存失败\n");      printf("\n");   }}
原创粉丝点击