#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");
}
}
进程间通信之共享内存
最新推荐文章于 2024-05-10 18:05:30 发布