tuxboy
16-06-2002, 21:17
Hallo da draußen,
der Compiler will nicht so wie ich will;) Vielleicht kann mir ja jemand helfen ....
Ich möchte ein Programm ausführen (execv) und dessen Standardausgabe in eine Datei umleiten (um diese dann später wieder auzulesen) ....
Ich hab mich an mal fork(), pipe() und eben execv bedient; ich kann auch wunderbar in die Pipe schreiben, aber beim auslesen (wenn ich den Inhalt der Pipe mal probehalber auf der Konsole ausgeben möchte) kommt nur gewurschtel raus ....
Hier ein Code-Schnippsel:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void) {
int fd[2], nbytes;
pid_t childpid;
char readbuffer[300];
FILE *file;
pipe(fd);
if((childpid = fork()) == -1) {
perror("fork");
exit(1);
}
if(childpid == 0) {
close(fd[0]); // not needed
dup(fd[1]); /* make stdout same as fd[1] */
execlp("ls", "ls", NULL); // zu testzwecken tuts erstmal 'ls'
exit(0);
}
else {
/* Parent process closes up output side of pipe */
close(fd[1]);
/* Read in a string from the pipe */
nbytes = read(fd[0], readbuffer, sizeof(readbuffer));
printf("Received string: %s", readbuffer);
}
return(0);
}
Wäre dankbar wenn das mal jemand ergänzen könnte, ich peils nämlich im Momnet gar nicht mehr :)
Viele Grüße
der Compiler will nicht so wie ich will;) Vielleicht kann mir ja jemand helfen ....
Ich möchte ein Programm ausführen (execv) und dessen Standardausgabe in eine Datei umleiten (um diese dann später wieder auzulesen) ....
Ich hab mich an mal fork(), pipe() und eben execv bedient; ich kann auch wunderbar in die Pipe schreiben, aber beim auslesen (wenn ich den Inhalt der Pipe mal probehalber auf der Konsole ausgeben möchte) kommt nur gewurschtel raus ....
Hier ein Code-Schnippsel:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void) {
int fd[2], nbytes;
pid_t childpid;
char readbuffer[300];
FILE *file;
pipe(fd);
if((childpid = fork()) == -1) {
perror("fork");
exit(1);
}
if(childpid == 0) {
close(fd[0]); // not needed
dup(fd[1]); /* make stdout same as fd[1] */
execlp("ls", "ls", NULL); // zu testzwecken tuts erstmal 'ls'
exit(0);
}
else {
/* Parent process closes up output side of pipe */
close(fd[1]);
/* Read in a string from the pipe */
nbytes = read(fd[0], readbuffer, sizeof(readbuffer));
printf("Received string: %s", readbuffer);
}
return(0);
}
Wäre dankbar wenn das mal jemand ergänzen könnte, ich peils nämlich im Momnet gar nicht mehr :)
Viele Grüße