انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: حافظه مشترک با استفاده ازvfork ؟؟؟؟ {حل شد}  (دفعات بازدید: 1855 بار)

0 کاربر و 5 مهمان درحال مشاهده موضوع.

آفلاین m.minoo

  • Newbie
  • *
  • ارسال: 11
  • جنسیت : دختر
سلام دوستان.یه کمک در برنامه نویسی: چطوری میتونم در برنامه زیر برای استفاده از حافظه مشترک بین فرزندان و پدراز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;
}

« آخرین ویرایش: 21 آبان 1393، 09:11 ب‌ظ توسط m.minoo »

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4868
  • جنسیت : پسر
  • masoft قدیم
پاسخ : حافظه مشترک با استفاده ازvfork ؟؟؟؟
« پاسخ #1 : 16 آبان 1393، 01:31 ق‌ظ »
در صورتی که نیاز به حافظه مشترک دارید، بهتره از Threading استفاده کنید. راه دیگه استفاده از Pipe هستش، ولی خوب پیشنهاد من همون Threading هستش.

آفلاین m.minoo

  • Newbie
  • *
  • ارسال: 11
  • جنسیت : دختر
پاسخ : حافظه مشترک با استفاده ازvfork ؟؟؟؟
« پاسخ #2 : 18 آبان 1393، 07:46 ب‌ظ »
در صورتی که نیاز به حافظه مشترک دارید، بهتره از Threading استفاده کنید. راه دیگه استفاده از Pipe هستش، ولی خوب پیشنهاد من همون Threading هستش.
درسته با پایپ میشه انجامشم دادم ولی منظورتون ازthreading چیه؟
من میخواستم این برنامه رو با vfork انجام بدم و از بخش دیتا یه عنوان حافظه مشترک استفاده کنم ممنون میشم از کمکتون.

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4868
  • جنسیت : پسر
  • masoft قدیم
پاسخ : حافظه مشترک با استفاده ازvfork ؟؟؟؟
« پاسخ #3 : 18 آبان 1393، 09:54 ب‌ظ »
توی اینترنت در مورد pthread جستجو کنید.