PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm ausführen und stdout in Datei umleiten (C)



tuxboy
16-06-2002, 20: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

anda_skoa
16-06-2002, 20:39
Original geschrieben von tuxboy
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'


Ich hab mich bisher damit noch nicht beschäftigt, aber vielleicht hilt dir das trotzmde.

Warum sollte dup(fd[1]) bewirken, dass stdout das selbe wie fd[1] wird?

Zumindest laut man page kann er das nicht.

Vielleicht wolltest du


dup2(fd[1], stdout);

benutzen?

Ciao,
_

tuxboy
16-06-2002, 21:01
Hi,
erstmal danke, das ging wirklich schnell....

warum? Hab ich mich auch gefragt; so stands nur auf den WebSites die ich zum Thema gefunden hab ....

Ich werd das jetzt mal ausprobieren .....

Grüße

anda_skoa
16-06-2002, 21:23
Übrigens muss es in dup2 statt stdout STDOUT_FILENO heißen.
stdout it vom Typ FILE*

STDOUT_FILENO ist definiert in unistd.h


Ciao,
_

tuxboy
17-06-2002, 09:25
Danke, es hat sich erledigt.....

ICH HABS.....;)

Danke für die Hilfe;

die erste Möglichkeit hat auch funktioniert, aber da ich die FehlerAusgabe auch umleiten musste, konnte ich dann auf Deine Lösung zurückgreifen.....


Danke