Bernhard Guillon schrieb:
On 30.08.2010 18:44, lano wrote:
Ok, soweit kann ich dir folgen. Jetzt würde ich denken, schreibe ich
"struct ifreq ifr;"
außerhalb der funktion dann wäre es ja global. tuts aber auch nicht.
Globale Variablen sind an sich keine gute Idee...
Hier etwas das bei deinem Beispiel besser geeignet ist:
Da malloc Speicher vom Heap reserviert ist er nach dem Funktionsaufruf
noch vorhanden. Du kannst die MAC in den von dir reservierten
Speicherbereich schreiben/kopieren. Meistens macht man aber call by
reference. Deswegen meinte ich ja es ist eine gute Idee die zwei
Varianten call by reference und call by value mal genauer zu
untersuchen :)
Laut Buch und google handelt es sich wohl um eine Struktur.
&ifr.ifr_hwaddr.sa_data;
müsste dann nicht irgendwo etwas wie:
struct ifreq {
char ifr_hwaddr;
};
struct ifreq ifr;
stehn? aber was hatt es dann mit sa_data auf sich?
Such mal in den Includes, die du angegeben hast danach dort sind die
ganzen Sachen deklariert.
Ah ja da war ja noch was mit, naja Bäume und Wald und so ;
Warscheinlich hast du für das Shellskript curl verwendet? Wenn ja
solltest du dich recht schnell mit libcurl [1] zurecht finden. Hier
ist ein Beispiel dazu [2].
Das ganze soll auf der Dbox2 laufen, nem ppc mit 66MHz, da die Box aber
schon genug aufgaben hat, zb das TV-Bild anzeigen, ist das schlecht wenn
ich ne ganze reihe systembefehle brauche.
Die Box hat nur ne bussybox, also nur recht wenig befehle.
ich habs so gelöst:
#!/bin/sh
User=`ifconfig | grep HWaddr`
User=`echo $User | { read first zwei drei vier rest ; echo "$rest"; }`
#### Mac besorgen
CurrentChannel=`pzapit -gi`
CurrentChannel=`echo $CurrentChannel | { read first rest ; echo "$first"; }`
#### Aktuellen Kanal holen, kann man auch vom http localhost beziehen
if [ "$CurrentChannel" = "" ]; then
CurrentChannel=standby
fi
#### Wenn kein Kanal, dann ist die Box im standby
wget -q -O /dev/null
"http://xyz.dyndns.info/index.php?channel=$CurrentChannel&user=$User"
#### Daten an Server Senden
sleep 59
exec $0 &
#### Sich selber neu starten
exit 0
Was genau braucht bei dem Skript eigentlich so viel Power? Von der
Beschreibung her sollte es länger dauern die Seite vom Server zu
bekommen bzw die da hin zu schicken. Das wird mit C auch nicht
schneller. Vieleicht kann man auch nur einen speziellen Teil des
Skriptes optimieren, statt das ganze in C zu schreiben.
Naja könnt man sicher, das ist jetzt mal ne verkürzte fassung, wenn der
kanal sich zb nicht geändert hat, sendet er auch nix an den server, es
sei denn der kanal bleibt bei 5 scriptdurchläufen gleich.
Dazu leg ich dann noch ne tmp datei an wo ich mir den letzten kanal merke.
der wird dann verglichen, da das dann insgesamt viele systemaufrufe
sind, dacht ich das könnt ich mir in c in ner variablen merken, dann
sind die sachen schonmal im ram bereich und der zugriff schneller. Hinzu
kommt das ich eigentlich dachte ich könnt doch nochmal nen bisschen mit
c üben. Mich ärgert das schon das ich das früher nicht gelernt hab, im
gunde könnt man damit schöne sachen machen, wenn man denn nicht grade
meinen kopf auf den schultern trägt ;)
Ich wette du schreibst sowas in 20 min, beim kaffee trinken nebenbei,
ich sitz da nun schon ne woche dran, nacht für nacht und den halben tag ;)
Gruß
Bernhard
-Sven-
--
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org