Bernhard Guillon schrieb:
On 30.08.2010 15:59, lano wrote:
Nathanael Schweers schrieb:
On Mon, 30 Aug 2010 14:36:09 +0200
lano <[email protected]> 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

Antwort per Email an