我試圖讓兩個不同的進程通過使用內存映射相同的文件進行通信。不過,我在這方面遇到了一些問題。我有一種感覺,這與我使用open()調用並將文件描述符傳遞給mmap的方式有關。通過文件使用mmap
這是我的代碼,你能看到它有什麼問題嗎?
對象1的代碼:
16 FILE* temp = fopen(theSharedFileName, "w");
17 fseek(temp, fileSize-1, SEEK_SET);
18 fprintf(temp, "0"); // make the file a certain size
19 fseek(temp, 0, SEEK_CUR);
20
21 int sharedFileName = fileno(temp);
...
31 sharedArea = (MyStruct*)mmap(0, fileSize,
32 PROT_READ | PROT_WRITE | PROT_EXEC, MAP_SHARED, sharedFileName, 0);
我使用「w」文件模式,因爲對象1將只進行一次,我希望它重置以前已有的數據。
對象2的代碼:
130 FILE* tempFile = fopen(sharedFileName, "a");
131 int theFile = fileno(tempFile);
...
135 sharedArea = (MyStruct*)mmap(NULL, fileSize,
136 PROT_READ | PROT_WRITE | PROT_EXEC, MAP_SHARED, theFile, 0);
你面臨的確切問題是什麼?你能保證obj2在obj1之前永遠不會訪問文件嗎? – dirkgently 2009-04-12 23:12:24
是的,obj1更像是一個服務器,而obj2就像稍後會啓動的客戶端。 – samoz 2009-04-13 12:55:40