Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : mit pipes sdtout ausgabe umleiten



mithras
21-08-2002, 13:14
Hi,
ich will über pipes die Ausgabe eines systemsbefehl in C, also z.B. system(ls -l) in eine array in dem ausführenden programm speichern. Habe bereits ein Tut (www.pronix.de) dazu gelsen. Auf den conde bin ich gekommen:, leider funktioniert das ganze nicht so, kann mir jmd. helfen?


#include <unistd.h>
#include <sys/wait.h>
#include <stdio.h>
#include <sys/types.h>
#include <fcntl.h>
#include <signal.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>

int fkt(char *ptr);

int main()
{
int fd[2],n; //,fd1;
pid_t pid;
char puffer[100000];
if (pipe(fd) < 0)
{
puts("pipe() failed!");
}
pid = fork();
switch (pid)
{
case -1:
{
puts("fork()failed!");
}
case 0:
{
// Kind
close(fd[1]);
n=read(fd[0], puffer, 100000); // ich lese aus der pipe und speicher inhalt in puffer
printf("\nPuffer: \n%s\nhallo!!", puffer);
}
default:
{
// Eltern
system("ps u");
close(fd[0]);
write(STDOUT_FILENO, puffer, n); // ich schreib in die pipe und zwar die standartausgabe von system
}
}
fkt(puffer);
//hier will ich den inhalt von puffer ausgeben auf dem bildschirm
return 0;
}
int fkt(char *ptr)
{
printf("\nFkt Anfang:\n \n%s \n\nEnde Fkt.\n\n", ptr);
return 0;
}
_________________
mithras

tkortkamp
21-08-2002, 13:40
Ein Beispiel um zu einerm Pipe zu schreiben (kann man dann ja leicht abändern um etwas zu lesen) aus der Info-page zu glibc:


#include <stdio.h>
#include <stdlib.h>

void
write_data (FILE * stream)
{
int i;
for (i = 0; i < 100; i++)
fprintf (stream, "%d\n", i);
if (ferror (stream))
{
fprintf (stderr, "Output to stream failed.\n");
exit (EXIT_FAILURE);
}
}

int
main (void)
{
FILE *output;

output = popen ("more", "w"); //Hier halt nicht w sondern r
if (!output)
{
fprintf (stderr,
"incorrect parameters or too many files.\n");
return EXIT_FAILURE;
}
write_data (output);
if (pclose (output) != 0)
{
fprintf (stderr,
"Could not run more or other error.\n");
}
return EXIT_SUCCESS;
}


c ya,
Tobias