Zwei Prozesse kommunizieren ueber eine Pipe, der eine liesst der andere schreibt
-
Hallo,
habe folgendes Programm, welches mit fork() zwei Prozesse erzeugt
und dann kommunizieren beide ueber eine Pipe miteinander. Bei der
Eingabe benutze ich getline. Ich wuerde gerne alles auf C umstellen
wie kann ich getline ersetzen?#include <sys/wait.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string> #include <iostream> #include <string.h> using namespace std; int main(int argc, char *argv[]) { int pfd[2]; pid_t cpid; char buf; if (pipe(pfd) == -1) { perror("pipe"); exit(EXIT_FAILURE); } cpid = fork(); if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); } if (cpid == 0) { close(pfd[1]); while (read(pfd[0], &buf, 1) > 0) write(STDOUT_FILENO, &buf, 1); write(STDOUT_FILENO, "\n", 1); close(pfd[0]); _exit(EXIT_SUCCESS); } else { close(pfd[0]); string eingabe; while(getline(cin,eingabe)) write(pfd[1], eingabe.c_str(), strlen(eingabe.c_str())); close(pfd[1]); wait(NULL); exit(EXIT_SUCCESS); } }
-
btw. benutze bitte einen Titel, der auch etwas mit deiner Frage zu tun hat
-
stdout, stderr, stdin sind vom Typ FILE*. Und hey .. fprintf, fscanf arbeiten mit diesen Typen.
-
Hi,
danke fuer die Infos!Habe es jetzt mit fgets probiert, aber irgendwie kommen
komische Zeichen heraus. Was mache ich falsch? Hat das irgendwas mit Nullterminierten Zeichenketten zu tun?while(fgets(buf,1024,stdin)) write(pfd[1], &buf, strlen(buf));
-
write(pfd[1], buf, strlen(buf));
(ich hoffe, dass
buf
auch einchar buf[1024];
ist und nicht daschar buf;
aus dem Originalcode)
-
rüdiger schrieb:
write(pfd[1], buf, strlen(buf));
(ich hoffe, dass
buf
auch einchar buf[1024];
ist und nicht daschar buf;
aus dem Originalcode)Aber wenn buf
buf
auch einchar buf[1024];
ist, dann ist doch&buf
das gleiche wiebuf
, oder?