我正在創建一個「每進程一個進程」服務器使用TCP協議進行學術目的。每個客戶端服務器在C中使用共享內存的一個進程
我用一個全球性的結構像一個波紋管:
struct keyvalue
{
char a[4096];
char b[4096];
}data[1000];
我使用fork()創建子爲每個客戶端。
我知道每個孩子都會將此結構視爲父進程的精確副本,但是如果孩子進行更改,則其他孩子不可見,這是我的目標。
我在谷歌搜索幾個小時,唯一正確的解決方案,我發現是mmap()的
婁我目前我如何試圖解決這個任務:但是我認爲,我的避風港
int main (int argc, char *argv[])
{
for(int c = 0; c < 1000 ; c++)
{
data[c] = mmap(NULL, sizeof(data[c]), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
}
.
.
.
return 0;
}
」不要理解這個函數的用法,文檔對這個項目沒有幫助。
如果有人向我解釋爲我的項目使用此功能的確切方式,那將會很棒。 編輯:
這種全球性的結構是使用兩個全局函數:
void put(char *key, char *value)
{
.
.
.
strcpy(data[lp].keys,key);
strcpy(data[lp].values,value);
.
.
.
}
感謝您的行爲和我的英語不好對不起。
這個結構數組應該對所有進程都可見?你會考慮使用pthreads嗎? –
@k_kaz是的,它應該對所有的過路者都是可見的。因爲它是一個服務器,所以每個進程(客戶)必須有權訪問這個結構。我不能使用pthreads,因爲它是爲了學術目的,並且指令是嚴格的。在這種情況下 –