2010-11-06 5 views
1

Я просто ищу простой учебник/пример, чтобы поставить меня в правильном направлении, я не могу найти хороший простой.Обмен памятью между родительским и дочерним процессом в Solaris (in C)

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

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

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

Jary

+1

Вы вообще не пробовали? Вот первый хит: http://www.cs.cf.ac.uk/Dave/C/node27.html –

+0

Спасибо. Я посмотрел на Google, но получил только сложные примеры. Это лучшее, что я нашел, но мне было интересно, есть ли у кого-нибудь лучшие. – Jary

+0

У меня есть сомнение, что этот пример действительно для Solaris. – Jary

ответ

2

Вы должны варианты:

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

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

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

#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); 
} 
+0

Большое спасибо! У меня есть один тонкий вопрос: с помощью этого метода, возможно ли, что родитель проверяет общую память, когда ребенок существует, пожалуйста? Под этим я подразумеваю, что ребенок вызывает exit(), но я хотел бы вернуться от 0 до 4 значений. Возможно ли, чтобы родитель использовал sigaction() и прочитал разделяемую память в вызове функции (из прерывания, когда ребенок существует), пожалуйста? – Jary

+0

Да, это должно быть возможно. – Codo

+0

Большое спасибо. Я попробую ваш код, еще раз спасибо! – Jary

Смежные вопросы