Prozesskommunikation mit PIPES - wie funktioniert das?

U

UnixTeddy

Gast
Hallo erstmal,

Ich sitze gerade an einer C-Aufgabe und komme nicht so recht weiter.

3 Programme müssen geschrieben werden:

1. Eines, dass einen Sende und einen Empfängerprozess erstellt.

2. Ein "Sende-Programm", dass eine Nachricht über ein Xterm in die Pipe schreibt.

3. Ein "Empfangs-Programm", dass die Nachricht aus der Pipe auf ein Xterm ausliest.


Wir wurden mehr oder weniger ins kalte Wasser geworfen und dürfen uns dass nun "selbstständig" erarbeiten. Dementsprechend habe ich viele Fragen.

Hier ist erstmal

1. Das "Vaterprogramm":

Code:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/types.h>

main( )
{

int pid_1, pid_2, ret_pid;
short i;
int status;
/* Erstellen der Pipe */
if( mkfifo( "FIFO", 0666 ) < 0 ) 
{
      perror("Fehler beim Erstellen der Pipe");
      exit(-1);
}
/* Erstellen eines Sohn-Prozesses fuer den Empfaenger */ 
if( ...)
{
/* Starten des Empfaengers als Xterm */ 
if( pid_1 < 0 )
{
            perror("Fehler Oeffnen Xterm fuer Empfaenger-Prozess");
            exit(-1);
} 
}
/* Erstellen eines Sohn-Prozesses fuer den Sender */ 
if( ... )
{
/* Starten des Senders als Xterm */
if( ... < 0 ) 
{
            perror("Fehler Oeffnen Xterm fuer Sender-Prozess");
            exit(-1);
} 
}
printf("Sohn-Prozess mit PID %d generiert\n", pid_1 );
printf("Sohn-Prozess mit PID %d generiert\n\n", pid_2 );
for( i=0; i<2; i++ )
{
      if(( ret_pid = wait( &status )) < 0 )
      {
            perror("Fehler beim Warten auf Ende Sohn-Prozess");
            exit(-1);
      }
      printf("Sohn-Prozess mit PID %d wurde beendet\n", ret_pid );
      printf("Status: %x\n", status >> 8 );
}
if( unlink("FIFO") < 0 ) 
/* Löschen der PIPE */
{
      perror("Fehler beim Loeschen der Pipe 'FIFO'");
      exit(-1);
} exit(0);
}

Also das ist erstmal das Grundgerüst für das Programm, dass den Sender und den Empfänger erstellt. Ich hoffe, das ist soweit richtig.
Vor allem die if(...)-Befehle bereiten mir sorgen:
Wie erstelle ich mit fork() einen Prozess? Was ist der Unterschied zwischen dem Sender und dem Empfängerprozess? Muss das hier im VaterProgramm irgendwie deklariert werden oder ergibt sich das automatisch?

Und dann wäre da nach "Xterm". Was ist das überhaupt?

Ich erwarte nicht, dass Ihr mir alles fertig programmiert. Aber wenn ihr mir ein paar Impulse geben könntet oder Literatur im Internet kennt, die dieses Theme behandeln wär ich euch sehr dankbar.

Freundlichst,

Euer UnixTeddy
 

Ähnliche Themen

SELinux und IPTV

Unix Webserver mit HTML Seite erstellen

Port generieren, wenn nicht dann

Server und Client für TCP und UDP

Queue für copy Script

Sucheingaben

Linux Prozesskommunikation

,

wie funktioniert pipe 2

Oben