私は同じファイルをメモリマッピングすることで、2つの異なるプロセスが通信できるようにしようとしています。しかし、私はこれにいくつか問題があります。私はこれが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);
は、私は、オブジェクト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);
あなたはどんな厳しい問題に直面していますか?あなたはobj1がobj1の前にファイルにアクセスしないことを保証できますか? – dirkgently
はい、obj1はより多くのサーバーであり、obj2は後で開始されるクライアントのようなものです。 – samoz