/** * Rechner mit Pipes. * * Schreiben Sie ein Programm, das über `fork` zwei Prozesse erzeugt, * die über zwei Pipes miteinander verbunden sind. Die beiden Pipes * dienen der bidirektionalen Kommunikation zwischen den beiden * Prozessen. * * Der Elternprozess sendet zwei Integer-Werte über die Pipe und der * Kindprozess berechnet die Summe der beiden Zahlen und sendet * das Ergebnis an den Elternprozess zurück. Dieser empfängt das * Ergebnis und gibt es auf der Konsole aus. */ #include #include #include #include void write_num(int fd, int num) { write(fd, &num, sizeof(num)); } int read_num(int fd) { int num; read(fd, &num, sizeof(num)); return num; } int main(int argc, char** argv) { int pipefd_a[2]; int pipefd_b[2]; // zwei Pipes anlegen if (pipe(pipefd_a) == -1 || pipe(pipefd_b) == -1) { perror("Keine Pipe"); exit(1); } // Variablen mit besseren Namen int pc_r = pipefd_a[0]; int pc_w = pipefd_a[1]; int cp_r = pipefd_b[0]; int cp_w = pipefd_b[1]; if (fork() > 0) { // parent close(pc_r); close(cp_w); write_num(pc_w, 42); write_num(pc_w, 23); int result = read_num(cp_r); printf("Ergebnis: %d\n", result); close(pc_w); close(cp_r); } else { // child close(pc_w); close(cp_r); int a = read_num(pc_r); int b = read_num(pc_r); int a_b = a + b; write_num(cp_w, a_b); close(cp_w); close(pc_r); } return 0; }