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