Re: [PUG] IPV6 Firefox/NSS/etc.

2010-08-30 Diskussionsfäden Markus Schönhaber
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

2010-08-30 Diskussionsfäden lano

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

2010-08-30 Diskussionsfäden lano

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

2010-08-30 Diskussionsfäden lano

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

2010-08-30 Diskussionsfäden Nathanael Schweers
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

2010-08-30 Diskussionsfäden Nathanael Schweers
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

2010-08-30 Diskussionsfäden lano

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

2010-08-30 Diskussionsfäden Bernhard Guillon

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...

2010-08-30 Diskussionsfäden michael
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

2010-08-30 Diskussionsfäden lano

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

2010-08-30 Diskussionsfäden Bernhard Guillon

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

2010-08-30 Diskussionsfäden lano

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

2010-08-30 Diskussionsfäden lano

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