002
10.10.2006, 17:11 Uhr
Pablo
Supertux (Operator)
|
So einfach geht das nicht.
sowas wie system("command >file.txt 2>&1") würde ich vermeiden, denn du weißt nicht, ob du die Berechtigung hast, file.txt zu schreiben.
Du musst die Funktionen exec(3) benutzen. Also zuerst ein fork, dann musst du stdout/stderr duplizieren mit dup(2) oder dup2, also so etwas in der Art
C++: |
pid_t child; int df[2];
if(pipe(df) < 0) { perror("pipe"); exit(1); }
child = fork();
if (child < 0) { perror("fork"); close(df[0]); close(fd[1]); exit(1); }
if(child) { /* Vater */ close(fd[1]); /* schreibende Seite der Pipe schliessen */ waitpid(child, NULL, 0); /* Um stdout vom Programm zu lesen, einfach read(fd[0], buffer, len_of_buffer) benutzen */ } else { /* Kind */
/* lesende Seite schließen */
close(df[0]);
if(fd[1] != STDOUT_FILENO) /* diese IF Anweisung ist sehr wichtig !!! */ { if(dup2(df[1], STDOUT_FILENO) != STDOUT_FILENO) { perror("dup2"); exit(1); } }
execlp("sh", "-c", "command", NULL); exit(1); }
|
das gleiche kann man mit STDERR machen, nochmal eine pipe anlegen und weiterleiten. -- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 10.10.2006 um 23:22 Uhr von Pablo editiert. |