Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » GNU/Linux » Befehl ausführen und Ausgabe weiterverarbeiten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
08.06.2005, 19:47 Uhr
~Netbound
Gast


Hallo, ich möchte irgendein Befehl wie iwconfig zb ausführen und die ausgabe des programmes weiter in einem string verarbeiten.


mfg Netbound
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.06.2005, 19:48 Uhr
~Netbound
Gast


hinzuzufügren wär noch, in cpp ..
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.06.2005, 19:52 Uhr
Pler
Einer von Vielen
(Operator)


forken,
stdout bei kindseite schliessen,
stdin bei elternseite schliessen,
pipe einrichten, und jeweils drauflegen.
Aus der Pipe sollte man die ausgabe lesen können.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.06.2005, 19:54 Uhr
~Netbound
Gast


danke, ich weiss zwar nicht was du damit 100% meinst. aber ich versuchs mal.

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.06.2005, 20:03 Uhr
Pler
Einer von Vielen
(Operator)


Hab dieses Programm aus einem Buch:
Das macht genau das, nur andersrum.
Die Ausgabe aus dem Elternprozess, wird über eine Pipe auf die Eingabe des Kindprozesses gelegt. Der Kindprozess wird dann mit more überlagert.

( Dieses fehler_meld() ist nicht viel mehr als ein perror(), also nicht verwirren lassen )


C++:
#include   <math.h>
#include   <sys/wait.h>
#include   "eighdr.h"

int
main(int argc, char *argv[])
{
   long       von, bis, i,
              teiler, zahl, wurzel;
   int        fd[2];
   pid_t      pid;
   FILE       *schreib_dz;

   if (argc != 3)
      fehler_meld(FATAL, "usage: %s von bis", argv[0]);
   else if ( (von = atol(argv[1])) <= 0 || (bis = atol(argv[2])) <= 0 )
      fehler_meld(FATAL, "Argumente muessen positive Zahlen sein");

   if (pipe(fd) < 0)
      fehler_meld(FATAL_SYS, "kann keine Pipe einrichten");

   if ( (pid = fork()) < 0)
      fehler_meld(FATAL_SYS, "fork-Fehler");

   else if (pid > 0) {   /*------ Elternprozess: schreibt in die Pipe -----*/
      close(fd[0]);  /* Leseseite der Pipe schliessen */
      if ( (schreib_dz = fdopen(fd[1], "w")) == NULL)
         fehler_meld(FATAL_SYS, "fdopen-Fehler");

      for (i=von; i<=bis; i++) {  /*-- Primfaktorzerlegung fuer von..bis */
         teiler = 2;
         wurzel = sqrt(zahl=i);
         fprintf(schreib_dz, "%ld = ", zahl);
         while (teiler <= wurzel) { /* Faktoren zu einer Zahl */
            while (zahl % teiler == 0) {
               fprintf(schreib_dz, "%ld * ", teiler);
               zahl /= teiler;
            }
            teiler++;
         }
         if (zahl != 1)
            fprintf(schreib_dz, "%ld\n", zahl);
         else
            fprintf(schreib_dz, "\b\b\b   \n");
      }
      fclose(schreib_dz); /* Schreibseite schliessen, um Kindprozess     */
                          /* das Ende des Schreibens in Pipe mitzuteilen */
      if (waitpid(pid, NULL, 0) < 0)
         fehler_meld(FATAL_SYS, "waitpid-Fehler");
      exit(0);

   } else {              /*------ Kindprozess: liest aus der Pipe ---------*/
      close(fd[1]);  /* Schreibseite der Pipe schliessen */
      if (fd[0] != STDIN_FILENO) {
         if (dup2(fd[0], STDIN_FILENO) != STDIN_FILENO)
            fehler_meld(FATAL_SYS, "Fehler bei dup2 fuer stdin");
         close(fd[0]); /* Nach dup2 wird fd[0] nicht mehr benoetigt */
      }

      if (execl("/bin/more", "more", NULL) < 0)
         fehler_meld(FATAL_SYS, "execl-Fehler fuer more");
   }
   exit(0);
}


Dieser Post wurde am 08.06.2005 um 22:43 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.06.2005, 12:06 Uhr
typecast
aka loddab
(Operator)


Das geht auch einfacher


C++:
#include <stdio.h>
//...
FILE* fd;
if (NULL == (fd = popen("/sbin/ifconfig", "r"))) {
fprintf(stderr, "Blubb\n");
exit(-1);
}

// schnapp dir den output
pclose(fd);
//...



popen uebernimmt die ganze Geschichte von oben fuer dich.
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ GNU/Linux ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: