Problem - System Calls
-
Hallo ich hoffe das mir hier einer helfen kann. Ich habe da ein kleines Verständnisproblem.
Also folgende Situation. Ein Parent erzeugt eine Pipe, danach 2 Kinder.
Das erste Kind erzeugt eine Reihe von zufallszahlen, und das 2te kind wertet diese Zahlen aus.
Die beiden Kinder kommunizieren über eine Pipe.
Und genau da liegt irgendwie mein VerständnisProblem.
So sieht immoment mein Code aus
Kind1:#include <stdio.h> #include <unistd.h> #define BUFFER 512 int main(int argc,char *argv[]) { int i,p; int nchar=atoi(argv[0]),seed=atoi(argv[1]); char n_char[BUFFER]; srand(seed); p=atoi(argv[2]); for (i=0;i<nchar;i++) { sprintf(n_char," %i ",32+(rand()%95)); write(p,n_char,BUFFER); } }
Kind2:
#include <stdio.h> #include <unistd.h> #define BUFFER 512 int main(int argc,char *argv[]) { int i,p; static int small,great,special; char n_char[BUFFER]; p=atoi(argv[0]); for(i=0;i<5;i++) { read(p,n_char,BUFFER); if (atoi(n_char) >= 'a' && atoi(n_char) <='z') { small++; } else if (atoi(n_char) >= 'A' && atoi(n_char) <='Z') { great++; } else { special++; } } printf("\nsmall letters: %i",small); printf("\ngreat letters: %i",great); printf("\nspecial Characters: %i\n",special); }
Die Kommunikation klappt auch, das ist auch nicht das Problem.
Nur im Kind2 habe ich halt eine feste for-schleife, aber das könnte ja auch mehr als 5 verschiedene Werte sein.
Wie kann ich das Variable machen?Hat da irgendeiner eine Idee?
MfG
oliver
-
Der Code scheint mir ziemlicher Nonsens zu sein. Du wandelst argv[0] (also den Namen des Programms!) in Integer (was soll das ergeben???) und benutzt diesen Integerwert als Datei-Deskriptor für read() und write().
Also eine Pipe erzeugt man mit pipe() (siehe auch man pipe). Diesen Befehl kann ich bei dir aber nirgends finden!Infos und viele Beispielprogramme zur Interprozesskommunikation findest du übrigens auch in meinem Buch "C und Linux".
Martin