|
mxKommunikation.h |
/*
* mxKommunikation.h
*
* ====================================================================================================================
* Das Modul mxKommunikation erbringt die Systemdienste
* Namensdienst und Kommunikation
* ACHTUNG: gehoert *nicht* zum initialen MinMax, erst ab Aufgabe 4 noetig!
* ====================================================================================================================
*/
#ifndef __mxKommunikation__
#define __mxKommunikation__
#include "mxStrukturen.h"
#include "mxSemaphor.h"
/***************
** Typen **
***************/
typedef struct { /* KommunikationsZustand eines Prozesses */
tName Name; /* Kommunikationsname des Prozesses */
tName Partner; /* Name des Partners, auf den gewartet wird */
int Senden; /* Flag: wird auf Empfaenger gewartet? */
int Empfangen; /* Flag: wird auf Sender gewartet? */
tKommunikationsStatus Resultat; /* wird beim Kopieren der Nachricht ausgefuellt */
tSemaphor Warte; /* zum Blockieren auf Empfang oder Sendung */
char *Puffer; /* Platz fuer zu kopierende Nachricht */
} tNachrichtenZustand;
/* -------------------------------------------------------------------------------------------------------------------- */
/***************
** Prototypen **
***************/
int NameAnmelden( tName Name );
/* Der uebergebene Name wird als Name des aufrufenden Prozesses vom Namensdienst verwaltet, wenn noch kein anderer
* Prozess diesen Namen verwendet hat. Besitzt der aufrufende Prozess zum Zeitpunkt des Aufrufs bereits einen Namen,
* so wird dieser vorher abgemeldet. Wurde der uebergebene Name akzeptiert, so liefert die Funktion true, sonst false
* zurueck.
*/
void NameAbmelden( tProzessNummer ProzessNr );
/* Der Name des uebergebenen Prozesses wird aus dem Namensdienst entfernt und dem Prozess dadurch die Moeglichkeit
* zur Kommunikation genommen. Falls der Prozess gerade auf eine Nachricht wartet, wird er deblockiert, ebenso alle
* Prozesse die auf Nachrichten von ihm warten oder gerade an ihn senden.
*/
tKommunikationsStatus Senden( tName Empfaenger, char *Nachricht );
/* Uebergibt eine Nachricht blockierend und sorgt dafuer, dass ein eventuell darauf wartender Prozess
* weiterlaeuft. Die Rueckgabe kann folgende Werte liefern:
* eNichtAngemeldet : der Sender hat sich nicht angemeldet
* eUnbekannt : kein Prozess mit Namen in <Empfaenger>
* eOk : die Nachricht wurde korrekt uebergeben
*/
tKommunikationsStatus Empfangen( tName *Sender, char *Nachricht );
/* Empfaengt blockierend eine Nachricht von <*Sender>. Wenn *Sender==cKeinName, so koennen Nachrichten
* von beliebigen Sendern empfangen werden. <*Sender> enthaelt anschliessend den
* tatsaechlichen Sender der Nachricht. Folgende Werte kann Empfangen zurueckliefern:
* eNichtAngemeldet : der Empfaenger hat sich nicht angemeldet
* eUnbekannt : kein Prozess mit Namen <*Sender> (nicht, wenn cKeinName angegeben)
* eOk : eine Nachricht wurde in Nachricht zurueckgegeben
*/
int InitKommunikation(void);
/* Init fuer das Modul mxKommunikation
*/
#endif
Bei Problemen mit der Seite bitte eine Mail an Marek
Converted with C2HTML V0.669 by Iluvatar
Prozeßdatenverarbeitung