Re: [PUG] IPV6 Firefox/NSS/etc.
29.08.2010 16:20, Martin Schmitt: Markus Schönhaber schrieb: gai.conf (5) - getaddrinfo(3) configuration file Hm, frage mich jetzt ernsthaft, welche anderen, völlig grundlegenden Sachen es noch so gibt, von deren Existenz ich über viele Jahre nix gemerkt habe. Ich hab davon heute ja auch zum ersten mal gelesen[1]. Das muß man aber nicht gleich persönlich nehmen. :-) Doch 8-) [1] http://www.tunnelbroker.net/forums/index.php?topic=747.0 Ich finde diese (wie ich naiv schätze: ziemlich unwahrscheinlichen) Zufälle so klasse: Wer die aktuelle c't (19/2010) besitzt, kann ja mal ein Blick auf die Seite 160 wagen. -- Gruß mks -- PUG - Penguin User Group Wiesbaden - http://www.pug.org
Re: [PUG] OT: c Programmierung für ganz anfängl iche Anfänger
Nathanael Schweers schrieb: In perl ist ein string ein scalar, in C nicht. C kennt keinen eigenen typ für strings, sondern strings sind einfach nur Arrays (listen) von chars. Um das Ende zu markieren bekommt das letzte Element den wert 0 (== '\0'). Das ist nicht das Zeichen '0'! Wenn du nun nen string hast und return Text; schreibst ist damit die Adresse des ersten Elements des Arrays gemeint. Darum brauchst du auch einen char * als Rückgabewert, sonst bekommst du bloß ein Zeichen (und einen Kompilerfehler). Da du kein Array zurückgeben kannst, sondern nur die Anfangsadresse dessen musst du auch vorher das Array an einer Stelle ablegen die beim verlassen der Funktion nicht ungültig wird. Alle lokalen Variablen werden ja schließlich wieder freigegeben - und damit eben auch die Variable Text. Ich schreib mal ein kleines bisschen code hier hin (und verzichte mal um die Verwirrung niedrig zu halten absichtlich auf Fehlerbehandlung): char *buffer=malloc(BUFSIZE+1); /* +1 für das 0-byte am ende */ ich hab nun folgendes was auch funktioniert: char *read_file(char *file_name) { FILE *datei; char *buffer=malloc(BUFSIZE+1); buffer[0]=0; if( (datei=fopen(file_name,r)) == NULL) { fprintf(stderr,Kann %s nicht oeffnen\n,file_name); return EXIT_FAILURE; } fgets(buffer,BUFSIZE,datei); return buffer; } geh ich jetzt recht in der annahme das ein free(buffer) nach dem aufrufen der funktion den speicher dann wieder frei gibt? ca so: printf(Kanal: %s, read_file(/tmp/currentChannel)); free(buffer); -Sven- -- PUG - Penguin User Group Wiesbaden - http://www.pug.org
Re: [PUG] OT: c Programmierung für ganz anfängl iche Anfänger
Moin, könnt mir nochmal jemand erklärend helfen, ich dreh hier auf kurz oder lang durch. Da denkste da haste was verstanden, nix ist, und try`n error nervt langsam. *---net.c--* #include stdio.h #include string.h #include net/if.h #include netinet/in.h #include sys/ioctl.h #define BUFSIZE 60 unsigned char *get_mac(void) { int sd; struct ifreq ifr; char *buffer=malloc(BUFSIZE+1); buffer[0]=0; sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); if (sd 0) { perror(socket); exit(1); } strncpy(ifr.ifr_name, eth0, IFNAMSIZ); if (ioctl(sd, SIOCGIFHWADDR, ifr) 0) { perror(ioctl SIOCGIFHWADDR); exit(1); } buffer = (unsigned char *) ifr.ifr_hwaddr.sa_data; //printf(%02x:%02x:%02x:%02x:%02x:%02x\n, buffer[0],buffer[1],buffer[2],buffer[3],buffer[4],buffer[5]); *--- Wenn ich printf auskommentiere wird die mac auch angezeigt--* return buffer; } *--net.h--* #ifndef __NET_H__ #define __NET_H__ unsigned char *get_mac(void); #endif *---main.c--* #include net.h char *buffer; int main(int argc, char **argv) { printf(Mac: %s\n, get_mac()); free(buffer); return 0; } Was mach ich da wieder fürn blödsinn? Buch lesen ist ja ganz nett, aber nen buch kann ich keine fragen stellen. Das deprimiert dermaßen, hab langsam echt kein bock mehr. trotzdem vielen dank für eure hilfe und die bemühungen. -Sven- --- der sich jetzt erstmal abreagieren muss -- PUG - Penguin User Group Wiesbaden - http://www.pug.org
Re: [PUG] OT: c Programmierung für ganz anfängl iche Anfänger
Moin, könnt mir nochmal jemand erklärend helfen, ich dreh hier auf kurz oder lang durch. Da denkste da haste was verstanden, nix ist, und try`n error nervt langsam. *---net.c--* #include stdio.h #include string.h #include net/if.h #include netinet/in.h #include sys/ioctl.h #define BUFSIZE 60 unsigned char *get_mac(void) { int sd; struct ifreq ifr; char *buffer=malloc(BUFSIZE+1); buffer[0]=0; sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); if (sd 0) { perror(socket); exit(1); } strncpy(ifr.ifr_name, eth0, IFNAMSIZ); if (ioctl(sd, SIOCGIFHWADDR, ifr) 0) { perror(ioctl SIOCGIFHWADDR); exit(1); } buffer = (unsigned char *) ifr.ifr_hwaddr.sa_data; //printf(%02x:%02x:%02x:%02x:%02x:%02x\n, buffer[0],buffer[1],buffer[2],buffer[3],buffer[4],buffer[5]); *--- Wenn ich printf auskommentiere wird die mac auch angezeigt--* return buffer; } *--net.h--* #ifndef __NET_H__ #define __NET_H__ unsigned char *get_mac(void); #endif *---main.c--* #include net.h char *buffer; int main(int argc, char **argv) { printf(Mac: %s\n, get_mac()); free(buffer); return 0; } Was mach ich da wieder fürn blödsinn? Buch lesen ist ja ganz nett, aber nen buch kann ich keine fragen stellen. Das deprimiert dermaßen, hab langsam echt kein bock mehr. trotzdem vielen dank für eure hilfe und die bemühungen. -Sven- --- der sich jetzt erstmal abreagieren muss -- PUG - Penguin User Group Wiesbaden - http://www.pug.org
Re: [PUG] OT: c Programmierung für ganz anfängli che Anfänger
On Mon, 30 Aug 2010 13:09:43 +0200 lano mail4l...@web.de wrote: Nathanael Schweers schrieb: In perl ist ein string ein scalar, in C nicht. C kennt keinen eigenen typ für strings, sondern strings sind einfach nur Arrays (listen) von chars. Um das Ende zu markieren bekommt das letzte Element den wert 0 (== '\0'). Das ist nicht das Zeichen '0'! Wenn du nun nen string hast und return Text; schreibst ist damit die Adresse des ersten Elements des Arrays gemeint. Darum brauchst du auch einen char * als Rückgabewert, sonst bekommst du bloß ein Zeichen (und einen Kompilerfehler). Da du kein Array zurückgeben kannst, sondern nur die Anfangsadresse dessen musst du auch vorher das Array an einer Stelle ablegen die beim verlassen der Funktion nicht ungültig wird. Alle lokalen Variablen werden ja schließlich wieder freigegeben - und damit eben auch die Variable Text. Ich schreib mal ein kleines bisschen code hier hin (und verzichte mal um die Verwirrung niedrig zu halten absichtlich auf Fehlerbehandlung): char *buffer=malloc(BUFSIZE+1); /* +1 für das 0-byte am ende */ ich hab nun folgendes was auch funktioniert: char *read_file(char *file_name) { FILE *datei; char *buffer=malloc(BUFSIZE+1); buffer[0]=0; if( (datei=fopen(file_name,r)) == NULL) { fprintf(stderr,Kann %s nicht oeffnen\n,file_name); return EXIT_FAILURE; } fgets(buffer,BUFSIZE,datei); return buffer; } geh ich jetzt recht in der annahme das ein free(buffer) nach dem aufrufen der funktion den speicher dann wieder frei gibt? ca so: printf(Kanal: %s, read_file(/tmp/currentChannel)); free(buffer); Ja, genau so ist das richtig. Gruß, Nathanael -Sven- -- PUG - Penguin User Group Wiesbaden - http://www.pug.org -- PUG - Penguin User Group Wiesbaden - http://www.pug.org
Re: [PUG] OT: c Programmierung für ganz anfängli che Anfänger
On Mon, 30 Aug 2010 14:36:09 +0200 lano mail4l...@web.de wrote: Moin, könnt mir nochmal jemand erklärend helfen, ich dreh hier auf kurz oder lang durch. Da denkste da haste was verstanden, nix ist, und try`n error nervt langsam. *---net.c--* #include stdio.h #include string.h #include net/if.h #include netinet/in.h #include sys/ioctl.h #define BUFSIZE 60 unsigned char *get_mac(void) { int sd; struct ifreq ifr; char *buffer=malloc(BUFSIZE+1); buffer[0]=0; sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); if (sd 0) { perror(socket); exit(1); } strncpy(ifr.ifr_name, eth0, IFNAMSIZ); if (ioctl(sd, SIOCGIFHWADDR, ifr) 0) { perror(ioctl SIOCGIFHWADDR); exit(1); } buffer = (unsigned char *) ifr.ifr_hwaddr.sa_data; //printf(%02x:%02x:%02x:%02x:%02x:%02x\n, buffer[0],buffer[1],buffer[2],buffer[3],buffer[4],buffer[5]); *--- Wenn ich printf auskommentiere wird die mac auch angezeigt--* return buffer; } *--net.h--* #ifndef __NET_H__ #define __NET_H__ unsigned char *get_mac(void); #endif *---main.c--* #include net.h char *buffer; int main(int argc, char **argv) { printf(Mac: %s\n, get_mac()); free(buffer); return 0; } Was mach ich da wieder fürn blödsinn? Buch lesen ist ja ganz nett, aber nen buch kann ich keine fragen stellen. Das deprimiert dermaßen, hab langsam echt kein bock mehr. trotzdem vielen dank für eure hilfe und die bemühungen. -Sven- --- der sich jetzt erstmal abreagieren muss Ich hab ehrlich gesagt Sowas noch nie gemacht, aber ... was genau ist denn da dein Problem? Gruß, Nathanael -- PUG - Penguin User Group Wiesbaden - http://www.pug.org
Re: [PUG] OT: c Programmierung für ganz anfängl iche Anfänger
Nathanael Schweers schrieb: On Mon, 30 Aug 2010 14:36:09 +0200 lano mail4l...@web.de wrote: *---net.c--* #include stdio.h #include string.h #include net/if.h #include netinet/in.h #include sys/ioctl.h #define BUFSIZE 60 unsigned char *get_mac(void) { int sd; struct ifreq ifr; char *buffer=malloc(BUFSIZE+1); buffer[0]=0; sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); if (sd 0) { perror(socket); exit(1); } strncpy(ifr.ifr_name, eth0, IFNAMSIZ); if (ioctl(sd, SIOCGIFHWADDR, ifr) 0) { perror(ioctl SIOCGIFHWADDR); exit(1); } buffer = (unsigned char *) ifr.ifr_hwaddr.sa_data; //printf(%02x:%02x:%02x:%02x:%02x:%02x\n, buffer[0],buffer[1],buffer[2],buffer[3],buffer[4],buffer[5]); *--- Wenn ich printf auskommentiere wird die mac auch angezeigt--* return buffer; } *--net.h--* #ifndef __NET_H__ #define __NET_H__ unsigned char *get_mac(void); #endif *---main.c--* #include net.h char *buffer; int main(int argc, char **argv) { printf(Mac: %s\n, get_mac()); free(buffer); return 0; } Ich hab ehrlich gesagt Sowas noch nie gemacht, aber ... was genau ist denn da dein Problem? ich erhalte als ausgabe: Kanal: 2718f001d176 Mac: Wie gesagt der Kanal ist richtig, das funktioniert. Nur die Mac wird nicht angezeigt. Wenn ich bei printf nicht %s sondern %x angebe bekomme ich: Kanal: 2718f001d176 Mac: 7df2 Meine vermutung, jetzt erhalte ich nur die adresse des speicherbereichs bei %c Kanal: 2718f001d176 Mac: � Problem ist das ich gern ein char string zurück gegeben haben möchte, im grunde das selbe wie bei read_file, was wir ja schon hatten, also vermute ich den fehler bei return in der funktion get_mac. voher hab ich ja: buffer = (unsigned char *) ifr.ifr_hwaddr.sa_data; erstens weis ich nicht was das mit sein soll, ich hab auch schon versucht: return ifr.ifr_hwaddr.sa_data; anzugeben, funktioniert aber auch nicht. in buffer[0],buffer[1],buffer[2],buffer[3],buffer[4],buffer[5] steht jedenfalls die mac drin. wenn in der funktion get_mac printf(%02x:%02x:%02x:%02x:%02x:%02x\n, buffer[0],buffer[1],buffer[2],buffer[3],buffer[4],buffer[5]); auskommentiere wird sie auch ausgegeben. Ich bekomm es aber nicht hin das ich sie in der main funktion angezeigt bekomme. -sven- -- PUG - Penguin User Group Wiesbaden - http://www.pug.org
Re: [PUG] OT: c Programmierung für ganz anfängl iche Anfänger
On 30.08.2010 15:59, lano wrote: Nathanael Schweers schrieb: On Mon, 30 Aug 2010 14:36:09 +0200 lano mail4l...@web.de wrote: *---net.c--* #include stdio.h #include string.h #include net/if.h #include netinet/in.h #include sys/ioctl.h #define BUFSIZE 60 unsigned char *get_mac(void) { int sd; struct ifreq ifr; struct ifreq ifr; ist lokal da du es innerhalb von get_mac definiert hast buffer = (unsigned char *) ifr.ifr_hwaddr.sa_data; Hier setzt du den Wert von deinem buffer auf die Adresse von ifr das ja lokal ist. angezeigt--* return buffer; Hier gibst du einen Pointer zurück der als Wert eine Adresse auf eine lokale Variable hat. Da das die Adresse von einer lokalen Variable ist kannst du außerhalb nichts mit der Adresse anfangen die in dem zurückgegebenen Pointer steht. Das liegt daran, dass Variablen die in Funktionen definiert werden auf dem Stack liegen und der Speicherbereich auf den der Pointer zeigt nach dem Aufruf undefiniert ist. Bücher vermitteln Grundlagen und sind meistens recht gut aufgebaut. Wenn du lieber mit Code spielst, was auch sehr wichtig ist um eine Programmiersprache zu lernen, solltest du dennoch vieleicht mit einfachen Programmen beginnen die gewisse C eigenheiten vermitteln. Hoffentlich klinge ich jetzt nicht wie ein Oberlehrer oder sowas - ist nicht meine Absicht! Scheib dir z.B. ein Programm in dem du die Gültigkeit von Variablen (lokal/global) ausprobierst. Aanschließend noch eins in dem du call by value und call by reference verwendest. Irgendwas mit Pointer Arithmetic z.B. ein char Array damit zu kopieren ist warscheinlich auch nützlich. Danach hast du es leichter und bist bei größeren Programmen nicht gefrustet :) Viel Spaß weiterhin Bernhard -- PUG - Penguin User Group Wiesbaden - http://www.pug.org
[PUG] was ist daraus geworden...
Hallo Liste, Einige von Euch werden sich vielleicht noch an die Installationsparty in der Rüsselsheimer Max-Planck-Schule erinnern? Die nicht so richtig in die Gänge kam weil zahlreiche Hardware Macken hatte? Und bei der deshalb Sascha und Klaus ziemlich gefragt waren? Nun, da war ein Schüler dabei, der wegen der zweiten Fremdsprache die Schule früh (nach der Kl. 9) verlassen hatte. Er war nebenbei Moderator in einem bundesweit wichtigen WLAN-Forum. Dieser hat eine Ausbildung zum System-Elektroniker gemacht, dann eine Fachoberschule besucht und fängt nun bald an einer FH den Studiengang Studiengang Informationstechnologie und Elektrotechnik an. Jahrelang war er, wie seine gleichaltrigen Kumpels, trotz unserer Party weitgehend unter Windows unterwegs. Jetzt schreibt er: ,,Seit Ende 2008 bin ich nun auch auf Linux als Haupt-OS umgestiegen, nachdem ich während dem Kompilieren von OpenWRT in einer virtuellen Maschine bemerkte, dass es eigentlich an der Zeit wäre den Spieß umzudrehen. Zudem war damals VirtualBox zum stabilen, ernstzunehmenden open-Source Ersatz für VMWare herangereift. Gerade zum Ausführen von diversen proprietären Programmen und mittlerweile zum reverse-Engineering ist es gut Windows ohne Reboot griffbereit zu haben. Nachdem ich nun auch an open Source-Projekten mitentwickle (beispielsweise OsmocomBB [1], sehr interessantes Projekt!), kommt jedoch ein Wechsel zurück nicht mehr in Frage. http://bb.osmocom.org/ http://www.golem.de/1002/73285.html Für ihn ist ein weiteres Open-Source-Projekt hochinteressant: [2] http://www.khanacademy.org/ http://money.cnn.com/2010/08/23/technology/sal_khan_academy.fortune/index.htm Wie Ihr seht lohnt es sich manchmal einfach ein wenig Geduld zu haben. Gruß, Michael Bischof -- PUG - Penguin User Group Wiesbaden - http://www.pug.org
Re: [PUG] OT: c Programmierung für ganz anfängl iche Anfänger
Bernhard Guillon schrieb: On 30.08.2010 15:59, lano wrote: Nathanael Schweers schrieb: On Mon, 30 Aug 2010 14:36:09 +0200 lano mail4l...@web.de wrote: *---net.c--* #include stdio.h #include string.h #include net/if.h #include netinet/in.h #include sys/ioctl.h #define BUFSIZE 60 unsigned char *get_mac(void) { int sd; struct ifreq ifr; struct ifreq ifr; ist lokal da du es innerhalb von get_mac definiert hast buffer = (unsigned char *) ifr.ifr_hwaddr.sa_data; Hier setzt du den Wert von deinem buffer auf die Adresse von ifr das ja lokal ist. angezeigt--* return buffer; Hier gibst du einen Pointer zurück der als Wert eine Adresse auf eine lokale Variable hat. 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. 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? Da das die Adresse von einer lokalen Variable ist kannst du außerhalb nichts mit der Adresse anfangen die in dem zurückgegebenen Pointer steht. Soweit hab ichs gerafft Bücher vermitteln Grundlagen und sind meistens recht gut aufgebaut. Wenn du lieber mit Code spielst, was auch sehr wichtig ist um eine Programmiersprache zu lernen, solltest du dennoch vieleicht mit einfachen Programmen beginnen die gewisse C eigenheiten vermitteln. *g* ich hab schon eine woche gebraucht bis Hallo Welt funktioniert hat. Eigendlich geht es insgesamt nur darum 1. eine datei vom einem http-server laden 2. das was in der datei steht in eine variable stecken 2. die mac in eine variable bekommen 3. daraus eine url basteln 4. die url an den http-server senden das ganze hab ich schon mit einem shell script getestet, dafür hab ich 15min gebraucht. problem, das script frist zuviel power. Also hab ich gedacht, versuchstes mal mit c. Eigentlich hatt ich gedacht wäre das schon eine einfache sache, das es so kommt konnt ich ja nicht ahnen. Hoffentlich klinge ich jetzt nicht wie ein Oberlehrer oder sowas - ist nicht meine Absicht! Nö klingste nicht. Scheib dir z.B. ein Programm in dem du die Gültigkeit von Variablen (lokal/global) ausprobierst. Aanschließend noch eins in dem du call by value und call by reference verwendest. Irgendwas mit Pointer Arithmetic z.B. ein char Array damit zu kopieren ist warscheinlich auch nützlich. wenn ich mit dem jetzt irgendwie durch bin und mal wieder nen paar nächte/wochen zeit habe, werd ichs mal versuchen, erstmal brauch ich nen gutes buch in papierform, da werd ich morgen mal schaun. Danach hast du es leichter und bist bei größeren Programmen nicht gefrustet :) An größere sachen denk ich erstmal garnicht ;) Viel Spaß weiterhin Bernhard Danke -Sven- -- PUG - Penguin User Group Wiesbaden - http://www.pug.org
Re: [PUG] OT: c Programmierung für ganz anfängli che Anfänger
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. *g* ich hab schon eine woche gebraucht bis Hallo Welt funktioniert hat. Eigendlich geht es insgesamt nur darum 1. eine datei vom einem http-server laden 2. das was in der datei steht in eine variable stecken 2. die mac in eine variable bekommen 3. daraus eine url basteln 4. die url an den http-server senden das ganze hab ich schon mit einem shell script getestet, dafür hab ich 15min gebraucht. problem, das script frist zuviel power. Also hab ich gedacht, versuchstes mal mit c. Eigentlich hatt ich gedacht wäre das schon eine einfache sache, das es so kommt konnt ich ja nicht ahnen. 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]. 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. Gruß Bernhard 1 http://curl.haxx.se/libcurl/ 2 http://curl.haxx.se/libcurl/c/simple.html -- PUG - Penguin User Group Wiesbaden - http://www.pug.org
Re: [PUG] OT: c Programmierung für ganz anfängl iche Anfänger
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=$CurrentChanneluser=$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
Re: [PUG] OT: c Programmierung für ganz anfängl iche Anfänger
Bernhard Guillon schrieb: Gruß Bernhard Boah, so, grad in dieser Minute geschafft. Kanal: 2718f001d176 Mac: 00:50:9c:15:c8:8b War das ne schwere geburt. unter anwendung von sprintf. Jetzt werd ich erstma ausschalfen. Vielen vielen dank für deine/eure bemühungen. Nathanael will ich ja nicht vergessen. so denn -Sven- -- PUG - Penguin User Group Wiesbaden - http://www.pug.org