systemausgabe umleiten

Post Reply
Message
Author
ne

systemausgabe umleiten

#1 Post by ne »

hi .. ich schon wieder <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

wie kann in systemausgaben umleiten ?
z.Bsp. möchte ich die Ausgabe von PWD in eine variable speichern

inder shell wäre das so:

pwd_var=`pwd`

ist nur ein Beispiel
ich möchte später über C ein Shellscript starten und den ausgabewert für die bearbeitng einer fehlermeldungen verwenden.

danke

Jochen

Re: systemausgabe umleiten

#2 Post by Jochen »

Wahrscheinlich ist popen(3) das, was Du suchst:

man 3 popen

Damit kannst Du dis Ausgabe eines Kommandos zeilenweise einlesen und dann wie gewünscht weiterberarbeiten/analysieren.

Arbeitest Du immer noch an Deiner Backup-Lösung? Und ist immer noch Sicherheit der Hauptgrund für die Portierung? Dann solltest du möglichst gar nicht mehr auf Shellskripte zurückgreifen. Die sind zu leicht manipulierbar von aussen, ohne dabei das Skript ändern zu müssen (siehe beispielsweise Shellvariable IFS). Man kann sichere Shellskripte schreiben, aber das ist vergleichsweise aufwendig. Also hast Du m.E. die Wahl zwischen einem C-Programm, dass ein aufwändig gesichertes Skript aufruft, und einem einzelnen aufwändig gesichertem Skript. Ich persönlich würde die Variante ohne C-Programm bevorzugen.

Jochen

ne

Re: systemausgabe umleiten

#3 Post by ne »

hi Jochen ...

dank dir für die schnelle und gute Antwort (wie immer) <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

Ich bin leider noch blutiger C-Anfänger - versuche noch unwissen mit fleiß zu kompensieren.
das Scripten ( Shell besser als cgi) bekomme ich gut hin (arbeite seit längerem mit Unix), nur leider kann ich wenig von diesem Wissen in C(++) umsetzen.
Deswegen hat mich ja auch das Interesse für C(++) gepackt.
Ich habe auch schon Unsummen in Bücher investiert <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle"> , bin aber der Meinung, daß Probieren und das Lösen kleinerer Probleme der bessere Lehrmeister ist.
Praxis ist halt besser - die fehlt halt nur.

kennst du vielleicht eine Seite, in der kleinere und hilfreiche Beispiele zu finden sind ?

PS: ich hänge noch an der BackUp-Lösung an besagtem Problem.

in der Schell würde ich die Config mit grep auslesen, ob sich die Zeichenkette "user=allow" in dieser Datei befindet ... wenn ja, dann weiter, sonst exit.
Die Umsetzung in C bereitet mir da mehr Schwierigkeiten. Ich benutze dazu dies als Referenz:
http://www.pronix.de/ckurs/ckurs83.html <- zumindest kann ich so erstmal einen Text lesen, nur wie ich ihn Zeilenweise nach eine bestimmten zeichenkette durchsuche weis ich noch nicht.

Nochmals danke und Gruß

Jochen

Re: systemausgabe umleiten

#4 Post by Jochen »

> kennst du vielleicht eine Seite, in der kleinere und hilfreiche Beispiele zu finden sind ?

Leider nein. Meine eigenen C-Kenntnisse haben (damals) schwer von eine 4wöchigen Kurs profitiert - aber das war auch von der Arbeit aus bezahlt worden.

Kennst Du das C-Puzzle-Buch? Schau es Dir erst mal an - es enthält <i>wirklich</i> schwere Beispielprogramme, deren Ausgabe man im Kopf/auf Papier erarbeiten soll. Wenn man das schafft, hat man das jeweilige Thema (Operatoren, Pointer, dynamische Speicherallozierung, Arrays,...) nicht nur verstanden, sondern auch verinnerlicht <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">. Das hat mich schon etwas weitergebracht.

Jochen

ne

Re: systemausgabe umleiten

#5 Post by ne »

hi Jochen

also popen macht bei mir nicht das, was ich will

Beispiel:

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">

#include <stdio.h>

main() {
FILE *unam
unam = popen("uname -n", "r");
printf("%s", unam);
pclose(unam);
}
</font><hr></pre></blockquote>

was ist unam dann ? offensichtlich kein string ?
denn ich möchte es später mit
if(strcmp(unam, "linux")==0){
printf("Hostname ist %s", unam);
} else {
printf("Hostname ist nicht %s", unam);
}
vergleichen. da aber schon printf mist ausgiebt, so kann das auch nicht funktionieren. wie wandel ich unam in einen string um - oder habe ich das problem nicht richtig verstanden ?

DANKE

PS: diese Beispiel hat keinen praktischen Wert - reine Übung <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

Labba

Re: systemausgabe umleiten

#6 Post by Labba »

Vielleicht solltest du doch mal das Buch lesen.
Dann wüsstest du, dass du ein Pointer vom Typ FILE ausgelesen werden muss. Dafür nimmst du am besten Funktionen wie "read()". Du solltest die Manpage ebenfalls zu rate ziehen !!!!!

ne

Re: systemausgabe umleiten

#7 Post by ne »

danke habs schon gelöst ... ach ja Labba: deine "!"-Taste klemmt

Gruß

Post Reply