Pro-Linux.de

Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 18. Nov 2018 9:54

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Rückgabe von Stdout mit execl()
BeitragVerfasst: 06. Jan 2009 20:23 
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 06. Jan 2009 22:43 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
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.


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 2 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de