IPC mit Pipes
-
Hallo liebes Forum,
warum kommuniziert mein Skript nicht richtig?Ich habe alles mehrmals durchdacht und finde keinen Fehler.
Wahrscheinlich ein Anfängerfehler.#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <string.h> #include <errno.h> struct summanden_ { int a; int b; }; int main (void) { int vomrechner[2], zumrechner[2]; int pid; char buf[20]; struct summanden_ summanden; int summe; int nbytes; if ( (pipe(vomrechner) != 0) || (pipe(zumrechner) != 0)) { printf("pipe(): %d %s\n", errno, strerror(errno)); exit(1); } pid = fork(); if (pid == -1) { printf("fork(): %d %s\n", errno, strerror(errno)); exit(1); } else if (pid == 0) { // Kind close(vomrechner[0]); close(zumrechner[1]); /* Hier Code */ read(zumrechner[0], buf, nbytes); printf("Kind liest:%i\n", atoi(buf)); } else { // Vater close(vomrechner[1]); close(zumrechner[0]); /* Hier Code */ printf("Bitte geben Sie eine Zahl an:\n"); fgets(buf, 20, stdin); //summanden.a = atoi(buf); write(zumrechner[1], buf, sizeof(buf)); printf("Bitte geben Sie eine zweite Zahl an:\n"); fgets(buf, 20, stdin); //summanden.b = atoi(buf); write(zumrechner[1], buf, sizeof(buf)); } return 0; }
-
Hi,
erstens das ist Quellcode und kein "Skript". Seitwann ist C eine Skriptsprache?
Zweitens wäre es nett, wenn du erwähnen würdest, was nicht funktioniert.
-
Du benutzt read falsch. Wieso übergibst du nbytes (was außerdem uninitialisiert ist)?
-
Entschuldige das mit dem Skript war natürlich mein Fehler.
Ich hab den ganzen Tag bisher Bash programmiert und dann ist mir das mit dem Skript rausgerutscht.Zu dem Fehler: Ich möchte per Pipe an den Sohn-Prozess zwei int Zahlen übergeben, diese addieren und zurückgeben und dann vom Vater ausgeben lassen.
Nur ein Pipe Beispiel aus der Uni.
Jedoch stand in der Aufgabenstellung ein Codegerüst wo int nbytes implementiert war und als ich mir die Syntax zu read() angeschaut hab, stand als dritter Parameter nbytes und dann hab ich leider einfach probiert.In dem dritten Parameter muss ich doch die Länge in Bytes angeben, die mein read maximal haben kann. (Blöd ausgedrückt, sorry)
Jedoch kann ein neuer Prozess doch nicht sizeof(Buf) bestimmen oder?
-
LouBen3010 schrieb:
In dem dritten Parameter muss ich doch die Länge in Bytes angeben, die mein read maximal haben kann. (Blöd ausgedrückt, sorry)
Genau. Dann tu das doch.
Jedoch kann ein neuer Prozess doch nicht sizeof(Buf) bestimmen oder?
Wieso nicht?
-
Suuuper!
Vielen Dank!Und auch dafür vielen Dank dass ich mir so schnell und kompetent helfen wollt.