同じファイルのメモリマッピングを使用して、2つの異なるプロセスが通信できるようにしようとしています。しかし、私はこれに関していくつかの問題を抱えています。これは、open()呼び出しを使用して、ファイル記述子を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);
オブジェクト1は一度だけ作成され、既存のデータをリセットしたいので、「w」ファイルモードを使用します。
オブジェクト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);