Совместное использование памяти между родительским и дочерним процессами в Solaris (в C) - PullRequest
1 голос
/ 06 ноября 2010

Я просто ищу простой учебник / пример, чтобы направить меня в правильном направлении, кажется, я не могу найти хороший простой.

Я ищу учебник, в котором объясняется, как разделить память (не используя каналы и файлы, а реальную память) между родительским и дочерним процессами (используя fork) в UNIX (Solaris) в C.

Я очень ценю вашу помощь,

Большое спасибо,

Jary

1 Ответ

2 голосов
/ 06 ноября 2010

У вас есть варианты:

  • Вы можете сначала выделить и присоединить общую память, а затем выполнить ответвление.

  • Вы можете выделитьразделяемая память, разветвите дочерний процесс и затем присоедините к разделяемой памяти в обоих процессах.

Первый вариант, вероятно, проще.Это может выглядеть следующим образом:

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

....

int size = 32000;

/* allocate and attach shared memory */
int shmID = shmget(IPC_PRIVATE, size, 0600);
void* shmPtr = shmat(shmId, NULL, 0);

/* fork child process */
pid_t pID = fork();
if (pID == 0)
{
    /* child */
    ... do something with shmPtr ...

    /* detach shared memory */
    shmdt(shmPtr);
}
else
{
    /* parent */
    ... do something with shmPtr ...

    /* detach shared memory */
    shmdt(shmPtr);
}
...