isabellakarst
Grünschnabel
Hallo an alle!
Ich habe eine mir unlösbare aufgabe bekommen:
Ich soll 3 Prozesse programmieren, die über einen shared memory miteinander kommunizieren. Außerdem soll das ganze nach einer bestimmten Reihenfolge ablaufen - die über Semaphore geregelt werden soll.
Ich habe bereits diese 3 Prozessansätze:
PROZESS 1:
PROZESS 2
PROZESS 3:
HEADERFILE:
#include <stdio.h>
#include <conio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
void log(void);
void io(void);
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Warum funktioniert die Kommunikation der Prozesse auf Knoppix nicht?
Bitte helft mir!
Danke Isabella
Ich habe eine mir unlösbare aufgabe bekommen:
Ich soll 3 Prozesse programmieren, die über einen shared memory miteinander kommunizieren. Außerdem soll das ganze nach einer bestimmten Reihenfolge ablaufen - die über Semaphore geregelt werden soll.
Ich habe bereits diese 3 Prozessansätze:
PROZESS 1:
Code:
//*********************************************************************************
//
// I know you guess
// Isabella Karst, Simone Lilg, Daniela Paulnsteiner
//
//*********************************************************************************
#include "ikyg.h"
#define SEM_NR 1 //Anzahl der Semaphore
#define KEY 0x12345 //Schlüssel für Semaphor (privat)
#define PERMISSION 0660
int seminit(int,char);
void main ()
{
//---------------------------------PROZESSE---------------------------------------------
int pid_IO;
int pid_LOG;
pid_LOG = fork();
pid_IO = fork();
//-------------------------INITIALISIEREN DES SEMAPHORS--------------------------------
int seminit(int argc, char **argv)
{
int semid;
if((semid = semget (KEY, SEM_NR, IPC_CREAT|PERMISSION)) < 0)
{
(void) fprintf (stderr, "%s: Fehler beim Erstellen des Semaphors: %s", argv[0], stderr(errno));
}
}
//-----------------------------------SHARED MEMORY--------------------------------------
//int *data;
int shmid;
//int i;
//double j;
//int k[BUFSIZE];
//int Gzahl;
if(shmid = shmget (KEY, BUFSIZE * sizeof(int), IPC_CREAT | PERMISSION)) < 0)
{
(void) fprintf(stderr, "%s: Fehler beim Erzeugen des Shared Memory: %s", argv[0], strerror(errno));
}
//---------------------------------ZUFALLSGENERATOR-------------------------------------
randomize();
zahl=rand()%100;
//................................Lesen aus Shared Memory...............................
if((shmid =shmget (KEY, BUFSIZE * sizeof (int), IPC_CREAT | PERMISSION)) <0)
{
(void) fprintf (stderr, "%s: Fehler beim Shared Memory: %s", argv[0], strerror(errno));
}
if((data = (int *) shmat (shmid, NULL, 0)) == (int*) -1)
{
(void) fprintf (stderr, "%s: Fehler beim anhängen an den Shared Memory: %s", argv[0], strerror(errno));
}
do{
for( i= 0; i<BUFSIZE; i++) {
Gzahl = data;
printf("\nWert: %d\n", data[i]);
}
}
while (*data != END_SIGNAL);
//********************************** zahl vergleichen *************************************************
if(Gzahl<Zahl)
{printf("\nIhre Zahl ist zu klein, bitte eine groessere eingeben!\n");
//..............................Schreiben in Shared Memory...............................
{
(void) fprintf(stderr, "%s: Fehler beim Shared Memory: %s", argv[0], strerror(errno));
}
//... ... ... ... ... ... shared memory schreiben ... ... ... ... ... ... ... ...
pid_IO = getpid();
for(j=0; j< 500000; j++)
{
for(i=0; i< BUFSIZE; i++)
{
data = 1;
}
}
*data = END_SIGNAL;
}
if(Gzahl>Zahl)
{printf("\nIhre Zahl ist zu gross, bitte eine kleinere eingeben!\n");
//..............................Schreiben in Shared Memory...............................
if((data = (int *) shmat (shmid, NULL, 0)) == (int *) -1)
{
(void) fprintf(stderr, "%s: Fehler beim Shared Memory: %s", argv[0], strerror(errno));
}
//... ... ... ... ... ... shared memory schreiben ... ... ... ... ... ... ... ...
pid_IO = getpid();
for(j=0; j< 500000; j++)
{
for(i=0; i< BUFSIZE; i++)
{
data = 1;
}
}
*data = END_SIGNAL;
}
if(Gzahl==Zahl)
{printf("\n! Sie haben die Zahl erraten !\n");}
}
PROZESS 2
Code:
//*********************************************************************************
//
//
Logik / Statistik
// Isabella Karst, Simone Lilg, Daniela Paulnsteiner
//
//*********************************************************************************
#include "log.h"
#define SEM_NR 1 //Anzahl der Semaphore
#define KEY 0x12345 //Schlüssel für Semaphor (privat)
#define PERMISSION 0660
int shmget ();
int seminit(int,char);
int shmid;
int BUFSIZE;
char argv;
int *data;
int a,i;
int versuche;
//----------------------------------LOG PROZESS------------------------------------------
//................................Lesen aus Shared Memory...............................
int main(void)
{
/*if((shmid =shmget (KEY, BUFSIZE * sizeof (int), IPC_CREAT | PERMISSION)) <0)
{
(void) fprintf (stderr, "%s: Fehler beim Shared Memory: %s", argv[0], strerror(errno));
}
if((data = (int *) shmat (shmid, NULL, 0)) == (int*) -1)
{
(void) fprintf (stderr, "%s: Fehler beim anhängen an den Shared Memory: %s", argv[0], strerror(errno));
}
*/
do{
for( i= 0; i<BUFSIZE; i++) {
a = data;
printf("\n Wert: %d \n", data);
}
}
while (*data != END_SIGNAL);
versuche=versuche+a;
printf("\nDas war ihr %dter Versuch", versuche);
if(versuche>10)
{printf("\nSie sind schlecht!");}
if(versuche>20)
{printf("\nSie sind dumm!");}
}
PROZESS 3:
Code:
//*********************************************************************************
//
// Eingabe und Ausgabe Prozess
// Isabella Karst, Simone Lilg, Daniela Paulnsteiner
//
//*********************************************************************************
#include "io.h"
void io()
{
int Gzahl;
printf("*** Willkommen bei diesem Ratespielchen! ***\n");
do{
printf("\n Bitte geben Sie eine Zahl zwischen 0 und 100 ein: \n");
scanf("%s", &Gzahl);
//..............................Schreiben in Shared Memory...............................
if((data = (int *) shmat (shmid, NULL, 0)) == (int *) -1)
{
(void) fprintf(stderr, "%s: Fehler beim Shared Memory: %s", argv[0], strerror(errno));
exit(1);
}
pid_IO = getpid();
for(j=0; j< 500000; j++)
{
for(i=0; i< BUFSIZE; i++)
{
data = Gzahl;
}
}
*data = END_SIGNAL;
}
//................................Lesen aus Shared Memory...............................
if((shmid =shmget (KEY, BUFSIZE * sizeof (int), IPC_CREAT | PERMISSION)) <0)
{
(void) fprintf (stderr, "%s: Fehler beim Shared Memory: %s", argv[0], strerror(errno));
exit(1);
}
if((data = (int *) shmat (shmid, NULL, 0)) == (int*) -1)
{
(void) fprintf (stderr, "%s: Fehler beim anhängen an den Shared Memory: %s", argv[0], strerror(errno));
exit(1);
}
do{
for( i= 0; i<BUFSIZE; i++) {
k = data;
printf("\nWert: %d\n", data);
}
}
while (*data != END_SIGNAL);
}while(k==1)
HEADERFILE:
#include <stdio.h>
#include <conio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
void log(void);
void io(void);
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Warum funktioniert die Kommunikation der Prozesse auf Knoppix nicht?
Bitte helft mir!
Danke Isabella
Zuletzt bearbeitet: