Я пытаюсь разрешить двум различным процессам общаться, используя сопоставление памяти одного и того же файла. Однако у меня возникают некоторые проблемы с этим. У меня такое чувство, что это связано с тем, как я использую вызов 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
Да, obj1 - это больше сервер, а obj2 - как клиент, который будет запущен позже. – samoz