Pipe implementierung funktioniert nicht..

S

Sternenjaeger

Grünschnabel
Hallo :)

ich habe ein "kleines" Problem, und zwar:

wir haben fuer die Hausuebung eine kleine shell vorgegeben bekommen, die wir um eine Pipe Bearbeitung erweitern sollten.

Leider funktioniert meine Pipe ueberhaupt nicht der erste Befehl wird noch ausgefuehrt, dann bricht sie ab.. und ich finde den Fehler einfach nicht. :(

(abgabe ist morgen.. args *G*)
der code:

int pipe_aufruf(Kommando k){
int sequenz_laenge = listeLaenge(k->sequenz.liste);
int fildes[2], pipe_status, P_Anfang, P_Mitte, P_Ende;
Liste liste;
Kommando kn;
pipe_status = pipe(fildes);
if(pipe_status==-1){perror("Pipe konnte nicht erzeugt werden\n");
exit(1);
}

for (int i = 1; i <= sequenz_laenge; i++){
if(i==1){
switch(P_Anfang = fork()){
case -1 : perror("fork nicht erfolgreich");
return 0;
//Kind liest aus Pipe, der Eingang wird geschlossen
case 0 : close(fildes[1]);
if(dup2(fildes[0],0) < 0 ){
perror("dup2 bei P Anfang fork nicht erfolgreich");
return 0;
}
kn = (Kommando)listeKopf(k->sequenz.liste);
programmaufruf(kn->einfach.wortanzahl, kn->einfach.worte);

//Mutter schreibt in die Pipe
default: close(fildes[0]);
if(dup2(fildes[1], 1)<0){
perror("Fehler bei Dup2 bei P_Anfang default\n");
exit(1);
}
kn = (Kommando)listeKopf(k->sequenz.liste);
programmaufruf(kn->einfach.wortanzahl, kn->einfach.worte);
}
}
else if(i==sequenz_laenge){
switch(P_Ende = fork()){
case -1 : perror("fork nicht erfolgreich");
return 0;
case 0 : close(fildes[1]);
if(dup2(fildes[0],0)<0){
perror("Fehler bei dup2 bei P_Ende\n");
return 0;
}
liste = k->sequenz.liste;
for (int i = 1; i < sequenz_laenge; i++){
liste = listeRest(liste);
}
kn = (Kommando)listeKopf(liste);
programmaufruf(kn->einfach.wortanzahl, kn->einfach.worte);

default: close(fildes[0]);
if(dup2(fildes[1], 1)<0){perror("Fehler bei Dup2 bei P_Ende default\n");}
liste = k->sequenz.liste;
for (int i = 1; i < sequenz_laenge; i++){
liste = listeRest(liste);
}
kn = (Kommando)listeKopf(liste);
programmaufruf(kn->einfach.wortanzahl, kn->einfach.worte);
}
}
else{
switch(P_Mitte = fork()){
case -1 : perror("fork bei P_Mitte nicht erfolgreich");
return 0;
case 0 : close(fildes[1]);
if(dup2(fildes[0],0)<0){
perror("dup2 bei P_Ednde fork nicht erfolgreich\n");
return 0;
}
liste = k->sequenz.liste;
for (int j = 1; i < j; j++){
liste = listeRest(liste);
}
kn = (Kommando)listeKopf(liste);
programmaufruf(kn->einfach.wortanzahl, kn->einfach.worte);
default: close(fildes[0]);
if(dup2(fildes[1], 1)<0){perror("Fehler bei Dup2 bei P_Ende default\n");}
liste = k->sequenz.liste;
for (int j = 1; i < j; j++){
liste = listeRest(liste);
}
kn = (Kommando)listeKopf(liste);
programmaufruf(kn->einfach.wortanzahl, kn->einfach.worte);
}
}
}
return 0;
}
 
Hallo

Von welcher Scriptsprache ist die Rede?
Das schaut weder nach bash, ksh noch csh aus. ;)

Gruß Wolfgang
 
ups.... falsches unterforum erwischt
*schaem*
*das richtige suchen geht*:search:


(dank der Hilfe des Profs ist der Fehler auch mehr oder weniger behoben :) *dezent die Compilerfehlermeldung wegshciebt*
 
Ok, dachte ich mir schon.
(dezent verschieb) ;)
Gruß Wolfgang
 

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

ip6tables Problem

Zugriff Ubuntu 16.04. auf Freigabe 18.04. LTS nicht möglich

awk: warum gibt close -1 zurück ?

Prozesskommunikation mit PIPES - wie funktioniert das?

Zurück
Oben