Schreiben von Daten in Rohr C++
ich brauche etwas zu tun, wie
echo "data" | cat
Mit
echo "data" | my program
In meinem Programm ruft die Katze und sendet meine stdin, um die Katze stdin und Holen Sie sich die stdout von der Katze.
Ich bereits Gabel Prozess, schließen Sie das schreiben und das Lesen, dup2 Sie und execl..
So kann ich die stdout aus, wenn ich einen execl("/bin/sh", "sh", "-c", "ls -lahtr", NULL) ich kann die Datei Liste als Ausgabe.
aber ich weiß nicht, wie, um Daten zu senden, wie senden Sie die echo-Daten, die ich Lesen von meiner stdin und senden Sie an die execl("/bin/sh", "sh", "-c", "Katze", NULL) stdin und zurück mein echo string.
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
int ficheiro_fd;
int pipe_fd[2];
char buffer[20];
int num_bytes;
pipe(pipe_fd);
switch ( fork() ) {
case -1:
exit(1);
case 0:
close(pipe_fd[1]);
dup2(pipe_fd[0], 0);
execlp("/usr/bin/base64"," ", NULL);
break;
default:
close(pipe_fd[0]);
//ficheiro_fd = open("output.txt", O_RDONLY);
while ((num_bytes = read(fileno(stdin), buffer, 1)) > 0){
write(pipe_fd[1], buffer, num_bytes);
}
close(pipe_fd[1]);
wait((int*)getpid());
}
return 0;
}
Mit diesem code, den ich kann senden Sie einige Daten, um das Programm und schreibt es auf den Bildschirm, ich will wissen, wie kann ich die stdout und senden Sie es an eine variable.
Vielen Dank für die Hilfe ppl.
Kannst du deinen code? deine Frage ist ein wenig verworren. Im Allgemeinen ein Rohr ist nur ein Weg, ein Prozess liest, während die andere schreibt, kann man nicht senden von Daten aus dem reader wieder an den Schreiber über die gleiche Leitung. So können Sie die echo-Daten | your_prog | Katze ... was wird passieren Ihr Programm stdout cat stdin...
Hi, teilte ich den code, den Grund brauche ich, werde ich senden ein Kommando durch sockel und die ich verarbeiten muss, auf der anderen Seite mit meinem input und die Rückkehr.
InformationsquelleAutor Lefsler | 2011-12-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie zwei senkrechte Striche() aufrufen, bevor Sie die Gabel. Diese werden den stdin und stdout von Ihrem Prozess aufgerufen. Nachdem Sie die Gabel, in der Kind-Prozess, dup2 der write-Ende der pipe auf stdout (1) und der lese-Ende der anderen Leitung stdin (0). Verschließen Sie die ungenutzten enden des Rohres, dann exec Ihren Prozess.
In der parent-Prozess, verschließen Sie die ungenutzten pipe-fds. Sie haben dann eine fd, die gelesen werden können mit read() des entsprechenden Kindes stdout, und eine fd, die geschrieben werden können, entsprechend der untergeordneten stdin.
InformationsquelleAutor dlowe