انجمنهای فارسی اوبونتو
کمک و پشتیبانی => راهنماها، نکات و ترفندها => نویسنده: m.minoo در 15 آبان 1393، 11:10 بظ
-
سلام دوستان.یه کمک در برنامه نویسی: چطوری میتونم در برنامه زیر برای استفاده از حافظه مشترک بین فرزندان و پدراز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;
}
-
در صورتی که نیاز به حافظه مشترک دارید، بهتره از Threading استفاده کنید. راه دیگه استفاده از Pipe هستش، ولی خوب پیشنهاد من همون Threading هستش.
-
در صورتی که نیاز به حافظه مشترک دارید، بهتره از Threading استفاده کنید. راه دیگه استفاده از Pipe هستش، ولی خوب پیشنهاد من همون Threading هستش.
درسته با پایپ میشه انجامشم دادم ولی منظورتون ازthreading چیه؟
من میخواستم این برنامه رو با vfork انجام بدم و از بخش دیتا یه عنوان حافظه مشترک استفاده کنم ممنون میشم از کمکتون.
-
توی اینترنت در مورد pthread جستجو کنید.