2010-11-06 126 views
1

我只是在尋找一個簡單的教程/示例來使我朝正確的方向發展,但似乎找不到一個好的簡單教程。在Solaris中的父進程和子進程之間共享內存(在C中)

我找一個父母和孩子之間的教程,說明如何共享內存(不使用管道和文件,但實際內存)(用叉子)在UNIX(Solaris)上的過程中C.

我真的很感謝你的幫助,

非常感謝你,

Jary

+1

您是否嘗試過使用護目鏡?這是第一次點擊:http://www.cs.cf.ac.uk/Dave/C/node27.html – 2010-11-06 05:39:31

+0

謝謝。我看過谷歌,但只有複雜的例子。這是我找到的最好的,但我想知道是否有人有更好的。 – Jary 2010-11-06 05:53:04

+0

我懷疑這個例子實際上是用於Solaris的。 – Jary 2010-11-06 06:00:50

回答

2

你必須選擇:

  • 您可以先分配和附加共享內存,然後執行分支。

  • 您可以分配共享內存,fork子進程,然後在兩個進程中連接到共享內存。

第一個選項可能更容易。它可能如下所示:

#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 2010-11-06 14:44:32

+0

是的,這應該是可能的。 – Codo 2010-11-06 17:19:35

+0

非常感謝。我會嘗試你的代碼,再次感謝! – Jary 2010-11-06 20:47:28

相關問題