2016-01-19 28 views
1

我想有一個父進程,它創建了一堆子進程,我希望它們都在一個緩衝區上運行(執行讀寫操作)。例如,如果「cat」被存儲在我的緩衝區中,並且child0將其修改爲「cat-in」,那麼這個「緩衝區」就是一個C字符串(以空字符結尾的字符串)貓「,child1和child2等也會將緩衝區的內容看作」貓貓「。如何在Linux下在C中的兩個子進程之間共享緩衝區?

似乎有一個命令,mmap這正是我想要的,但我在互聯網上看到很多指南,但事情是我有一個非常困難的時間包裝我的腦海周圍共享區,所以我真的需要一個如何將其用於我所需要的具體示例,而且我所看到的指南中沒有一個似乎正確地涵蓋了這一點(其中大多數僅涵蓋讀取訪問權限,而覆蓋寫入訪問權限的內容似乎適用於更復雜的情況,因此有複雜的代碼,我不明白)。所以請記住這一點,如果你要標記爲重複。

爲了進一步明確和簡化我的問題......如果我有 $字符* BUF $ ......在我父程序..什麼是代碼,我需要寫,這樣寫 $說明書strcpy(buf,「cat」)$ ...在我的一個子進程中,更改對所有子進程都是可見的?

+0

谷歌的'先進的UNIX編程IPC mmap'ROCHKIND的書將出現在谷歌的圖書搜索中。這是一個非常好的參考。 – ojblass

+0

當child0將一個子字符串插入到'buffer'中時,這也會干擾所有其他正在操作緩衝區的子級使用的索引,並且還需要鎖定緩衝區以防止同時更改多個線程。 –

+0

如果你想要多個進程寫入內存,你應該閱讀[POSIX semaphores](http://man7.org/linux/man-pages/man7/sem_overview.7.html)。 –

回答

2

當你懷疑,你可以設置使用mmap 共享內存空間fork()之前-ing子進程用於這一目的:

#include <sys/mman.h> 

char *shared_mem = mmap(NULL, MEMSIZE, PROT_READ|PROT_WRITE, 
         MAP_SHARED|MAP_ANONYMOUS, -1, 0); 

現在,這個映射的所有進程和修改共享一個會反映在其他人身上。

+0

不錯,容易:)謝謝你,你是一個救生員 –

+0

請注意上面的註釋 - 你將需要使用一些方法來控制對這個共享資源的訪問,否則你會得到奇怪的間歇性錯誤,看起來「不可能」說明。 –

相關問題