Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Rückgabe von Stdout mit execl()

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Tobi F.
Gast





BeitragVerfasst am: 06. Jan 2009 20:23   Titel: Rückgabe von Stdout mit execl()

Abend,
ich schreibe gerade ein kleines Script um den Musiktitel usw von Amarok über ein µC an einem LCD auszugeben.

Die Ausgabe des Musiktitel erreiche ich auf der Konsole mit:
dcop amarok player title
Der Title wird dann auf stdout ausgegeben.

Jetzt habe ich in meinem C Programm eine kleine Funktion um Befehle aufzurufen.

Code:

int RunCommand(const char *strCommand)
{
   int iForkId, iStatus;
   iForkId = vfork();
   if (iForkId == 0)   // This is the child
   {
      iStatus = execl("/bin/sh","sh","-c", strCommand, (char*) NULL);
      exit(iStatus);   // We must exit here,
            // or we will have multiple
            // mainlines running... 
   }
   else if (iForkId > 0)   // Parent, no error
   {
      iStatus = 0;
   }
   else   // Parent, with error (iForkId == -1)
   {
      iStatus = -1;
   }
   return(iStatus);
}


Beispiel:
Code:

int iStatus = RunCommand("dcop amarok player title");


Aber wie bekomme ich jetzt den Titel am besten in eine Variable?
Ich habe schon daran gedacht mit > im Befehl die Ausgabe in eine Datei zu schreiben und diese dann wieder einzulesen, aber ich denke das wäre recht unschön.

Hat jemand eine Idee?

Gruß Tobi
 

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 06. Jan 2009 22:43   Titel:

Du musst eine Pipe öffnen und im Kindprozess vor dem exec die Standardausgabe auf diese Pipe verbiegen.

Da viele Leute sowas tun wollen und dabei immer wieder dumme Fehler machen, gibt es popen(). Nimm das statt fork() und exec().

Alternativ solltest du dir das Buch "Advanced Programming in the Unix Environment" von W. Richard Stevens in der Uni-Bibliothek deiner Wahl ausleihen, da stehen solche und andere Interessante Dinge über IPC unter Unix haarklein mit ausführlichen Beispielen drin.

Oder du änderst dein Programm so, dass das Hauptprogramm nicht das C-Programm, sondern tatsächlich ein Shellskript ist. Dann geht das z.B. so
Code:

#!/bin/sh
while :
do
  dcop amarok player title | displayonlcd
  sleep 10
done

Dein Programm wäre dann "displayonlcd" und würde den anzuzeigenden Text von der Standardeingabe lesen.

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy