Я пишу программу, использующую fork(), которая генерирует последовательность Fibonacci, так что если я передал 8 в командной строке, то вывод: 0, 1, 1, 2, 3 , 5, 8, 13, 21 и есть этот выходразделяемая память между родителем и дочерним элементом в c
следующий шаг I'am пытается сделать это разделило между родителем и ребенком с помощью Posix разделяемой памяти, но данные не разделяемые между ними, это мой код:
pid = fork();
if (pid == 0)
{ /* create the shared memory object */
shm_fib = shm_open(name, O_CREAT | O_RDWR, 0666);
/* configure the size of the shared memory object */
ftruncate(shm_fib, SIZE);
/* memory map the shared memory object */
ptr = mmap(0, SIZE, PROT_WRITE, MAP_SHARED, shm_fib, 0);
printf("Child is producing the Fibonacci Sequence...\n");
sprintf(ptr,"%d, %d,",f1,f2);
ptr++;
for (i=2;i<n;i++)
{
sum=f1+f2;
sprintf(ptr,"%d, ", sum);
ptr++;
f1=f2;
f2=sum;
}
printf("Child ends\n");
}
else
{ wait(NULL);
/* open the shared memory object */
shm_fib = shm_open(name, O_RDONLY, 0666);
if (shm_fib == -1)
{
printf("shared memory failed\n");
exit(-1);
}
/* memory map the shared memory object */
ptr = mmap(0, SIZE, PROT_READ, MAP_SHARED, shm_fib, 0);
printf("Parent is waiting for child to complete...\n");
/* read from the shared memory object */
printf("%s",(char *)ptr);
/* remove the shared memory object */
shm_unlink(name);
printf("Parent ends\n");
}
и это выход:
plz, Enter the value of number to show the fibonacci sequence:
9
Child is producing the Fibonacci Sequence...
Child ends
shared memory failed
Кто-нибудь может помочь мне узнать, почему общая память не сработала?!?
Вы можете найти [ESR] (https://en.m.wikipedia.org/wiki/Eric_S._Raymond) 's отличное эссе [Как Задавать Вопросы Smart Way] (http://catb.org/~esr/faqs/smart-questions.html). –