код уже компилируется, но прога выводит сообщение Error, то есть выполняется условие
| Код | int shmid=shmget(IPC_PRIVATE,2,IPC_CREAT|0666); if(shmid<0){ fprintf(stdout,"Error\n"); return 0; }
|
Обновленный код:
| Код | #include <stdio.h> #include <unistd.h> #include <sys/ipc.h> #include <sys/wait.h> #include <stdlib.h> #include <math.h> #include <iostream> #include <iomanip> #include <cstdlib> #include <cstring> struct mymem{ int mas[4]; int i[4]; } *mem_e; int main(){ int k=4; n=5; int l=8; int min[k]; int max[k]; int e[k]; int b[k]; int c[k]; int x[4][5]={{2,3,4,7,0},{5,4,3,2,1},{5,6,7,8,3},{4,8,6,7,9}}; int i,j; int shmid=shmget(IPC_PRIVATE,2,IPC_CREAT|0666); if(shmid<0){ fprintf(stdout,"Error\n"); return 0; } mem_e=(mymem*)shmat(shmid,NULL,0); int pid; pid=fork(); if(pid==0){ //Min for(i=0;i<k;i++) { min[i]=x[i][0]; for (j=0; j<n;j++) { if (x[i][j]<min[i]) min[i]=x[i][j]; }} // Max for (i=0;i<k;i++){ max[i]=x[i][0]; for (j=0; j<n;j++) { if (x[i][j]>max[i]) max[i]=x[i][j]; }} // max+min for(i=0; i<k;i++) { b[i]=max[i]; } for(i=0;i<k;i++) { c[i]=min[i]; } for(i=0; i<l; i++){ e[i]=(i<k?c[i]:b[i-k]); mem_e->mas[i]=e[i];} } if (pid!=0){ //Min for(i=0;i<k;i++) { min[i]=x[i][0]; for (j=0; j<n;j++) { if (x[i][j]<min[i]) min[i]=x[i][j]; }} // Max for (i=0;i<k;i++){ max[i]=x[i][0]; for (j=0; j<n;j++) { if (x[i][j]>max[i]) max[i]=x[i][j]; }} // max+min for(i=0; i<k;i++) { b[i]=max[i]; } for(i=0;i<k;i++) { c[i]=min[i]; } for(i=0; i<l; i++){ e[i]=(i<k?c[i]:b[i-k]); mem_e->mas[i]=e[i];} } wait(NULL); //Vyvod massiva for(i=0; i<k;i++) { printf("\n"; for(j=0; j<n;j++) { printf("x[%d][%d]= %d", i,j,x[i][j]);} } printf("\n"); // Vyvod na ekran min for(i=0; i<k;i++) { printf("%d\n", min[i]); } // Vyvod na ekran max for(i=0; i<k;i++){ printf("%d\n", max[i]); } //Vyvod max+min printf("Stroka\n"); fprintf(stdout,"%d\n", mem_e->mas[i]); } return 1; }
|
|