Gemeinsame Merkmale Lichter Diese Mechanismen werden als eine Einheit und gemeinsame Merkmale aufweisen, durchgeführt werden, unter denen: Alle Mechanismen haben eine Tabelle, deren Einträge beschreiben die Verwendung von ihnen gemacht werden. Jeder Tabelleneintrag hat einen numerischen Schlüssel, der vom Benutzer gewählten. Jeder hat einen Mechanismus zu erhalten, rufen Sie einen neuen Post erstellen oder abrufen vorhandenen. Innerhalb der Parameter dieses Aufrufs wird auch einen Schlüssel und eine Maske von Indikatoren. Der Kern in der Tabelle nach einem Eintrag, das die wichtigsten Spiele zur Verfügung gestellt. Wenn der Schlüssel IPC_PRIVATE gesetzt ist, befindet sich der Kern der erste Eintrag ist kostenlos und nutzen Sie alle Gespräche mit diesem Eintrag können, bis wir wieder freizugeben. Wenn innerhalb der Maske von Indikatoren IPC_CREAT Bit aktiv ist, wird der Kernel einen neuen Eintrag für den Fall, dass es keine Antwort auf die Schlüssel erstellt zur Verfügung gestellt. Die Zugabe von wenig IPC_CREAT IPC_EXCL Bit aktiv ist, gibt der Kernel ein Fehler, wenn es bereits einen Eintrag für den Schlüssel zur Verfügung gestellt. Wenn alles korrekt funktioniert der Kernel gibt ein Schlagwort auch in anderen Anrufe genutzt werden. Jeder Tabelleneintrag hat einen Rekord von Genehmigungen, einschließlich: User-ID und Prozess-Gruppe, die den Eingang reserviert ist. User-ID und diese Gruppe von der "Kontrolle" der IPC-Mechanismus geändert. "Eine Gruppe von Bits, mit Lese-, Schreiben und Ausführen für Benutzer, Gruppe und andere Benutzer. "Jeder Eintrag enthält Status-Informationen, die die ID des letzten Prozesses, dass der Eintrag verwendet hat, umfasst. | Erstellen einer Shared-Memory-Bereich, in dem auf ein Array von reellen Zahlen zu speichern. # Define MAX 10 int shmid, i; float * array; key_t key; if ((flush = ftok (Test, k)) == (key_t) -1) ( perror (Error Erstellung des Schlüssels) if ((shmid = shmget (key, MAX * sizeof (float), IPC_CREAT | 0600)) == -1) ( perror (Fehler im Antrag für MC);) if ((array = (float *) shmat (shmid, 0,0)) == (char *) -1) ( perror (Fehler in der Vereinigung der MC in die Prozesse);) for (i = 0, i <MAX, i + +) array [i] = i * i; if (shmdt ((char *) array) == -1) ( perror (Fehler in der Trennung der MC);) if (shmctl (shmid, IPC_RMID, 0) == -1) ( perror (Fehler bei der Beseitigung von MC);) |
---|