سلام دوستان.یه کمک در برنامه نویسی: چطوری میتونم در برنامه زیر برای استفاده از حافظه مشترک بین فرزندان و پدرازVFork() استفاده کنم به طوری که از بخش دیتای پدر( که فرزندان در vfork به اون دسترسی دارند) به عنوان حافظه مشترک استفاده بشه؟یعنی چطوری یه آرایه در بخش دیتای پدر به عنوان حافظه مشترک تعریف کنم؟بیش تر مشکلم اینه که نمیدونم چطوری به بخش دیتای پدر دسترسی داشته باشم؟؟؟
توی این برنامه ازسمافور واسه حافظه مشترک استفاده کردم اما میخوام اونو با vfork که گفتم تغییر بدم.
خوشحال میشم از کمکتون.
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
#include<sys/stat.h>
#include<sys/mman.h>
#include<sys/types.h>
#include<fcntl.h>
#include<semaphore.h>
#include<math.h>
floattabee(int x){
float y=10*sinf(.25*x);
if(y<0)
return -y;
return y;
}
float integral(int from, int to)
{
return (tabee(from) + tabee(to)) / 2;
}
int main()
{
int i;
float integ = 0;
float step;
pid_tpid;
sem_t *p;
sem_t *c;
p=sem_open("p",O_CREAT,S_IRUSR | S_IWUSR);
c=sem_open("c",O_CREAT,S_IRUSR | S_IWUSR);
sem_init(c,1,1);
sem_init(p,1,0);
float *shm=mmap(0, sizeof (float), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);
for (i=0;i<10;i++)
{
pid=fork();
if(pid==0)
{
sem_wait(c);
step=integral(i, i+1);
printf(“ child start: %d && child result: %f” ,i,step);
*shm=step;
sem_post(p);
exit(0);
}
}
for(j=0;j<10;j++)
{
int status;
wait(&status);
if(WIFEXITED(status))
{
sem_wait(p);
integ+=*shm;
printf(“\n parent read: %f && %d\n” , *shm,WEXITSTATUS(status));
sem_post(c);
}
}
printf("integral is = %d\r\n",integ);
return 0;
}