2 Stimmen

c Struktur im gemeinsamen Speicher

Ich habe eine Struktur wie

struct board{
   char name;
   int values[37];
}board

Stellen Sie sich ein Spiel vor, bei dem mehrere Spieler an einem einzigen Tisch spielen und alle auf verschiedene Positionen des Wertefeldes setzen, wobei der Name des Brettes eindeutig ist und ein Spieler ein Spiel unter Angabe des Bretternamens beginnt. Wenn 2 oder mehr Spieler denselben Brettnamen eingeben, nehmen sie alle an demselben Spiel teil.

Ich muss diese Struktur im gemeinsamen Speicher ablegen und auf den Inhalt von "values" zugreifen bzw. diesen ändern.
von verschiedenen Prozessen zur gleichen Zeit (Semaphoren sind kein Problem). Es ist mir gelungen, die Struktur in ein Stück gemeinsamen Speicher zu kopieren, aber ich weiß nicht, wie ich auf den Namen zugreifen kann, um zu sehen, ob eine Karte bereits vorhanden ist und solche Dinge.

Dies ist für ein Schulprojekt und ich bin ein wenig verzweifelt.... bitte helfen und danke. Übrigens, der gemeinsame Speicher, den ich möchte, verweist auf das POSIX-Betriebssystem

0 Stimmen

So etwas wie "Shared Memory" gibt es in C nicht. Wenn Sie sich auf ein plattformspezifisches Konzept beziehen, geben Sie bitte die Plattform explizit an (z.B. "dies ist für meinen TI-95-Rechner").

0 Stimmen

Zunächst einmal besteht der Name nur aus einem einzigen Zeichen. Er sollte entweder ein Zeiger oder ein Array sein. Und warum kopieren Sie nicht die gesamte Struktur in den gemeinsamen Speicher? Dann können Sie auf sie wie auf jede andere Struktur zugreifen. Außerdem, warum gemeinsamer Speicher? Startet jeder Spieler sein eigenes Programm auf dem Computer, oder stellen sie eine Verbindung über ein Netzwerk her?

0 Stimmen

Unterstützt Ihre shm-Bibliothek keine benannten Speicherbereiche? Wenn ja, können Sie jede Karte einer Speicherregion zuordnen. Entweder das, oder Sie verwenden einen rot-schwarzen Baum, um die (name, (struct board *)) Paare. Meinten Sie außerdem char *name ? (Eine feste Größe char array ist besser für shm, weil es einfacher ist, die Zeiger zu kopieren und zu verwenden.

4voto

sarnold Punkte 99402

Die POSIX-Shared-Memory-Funktionen sind bereits mit dieser Art von Aufwand im Hinterkopf geschrieben:

int shm_open(const char *name, int oflag, mode_t mode);

Wenn Sie "/onica_game_<name>" für Ihre *name können Sie ganz einfach festlegen, welche gemeinsamen Speichersegmente für Ihre gemeinsamen Spiele verwendet werden sollen. (Nebenbei bemerkt, ein einzelner char ist ein wenig einschränkend für Spielnamen. Sie sollten vielleicht verwenden char name[32]; oder etwas Größeres, um den Leuten die Möglichkeit zu geben, ihren Spielen einen sinnvolleren Namen zu geben).

Ich schlage vor, dem Namen den Zusatz onica_game_ weil der Namensraum für POSIX Shared Memory Segmente systemweit ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X