PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C RawSockets



Ryuu
16-03-2005, 12:03
Hallo,

ich beschäftige mich gerade mit Raw Sockets unter C. Da ich C gerade am lernen bin, ist mir eine Sache noch etwas unklar. Und zwar folgende Code Zeile:

struct ip *iph = (struct ip *)packet;
Soweit ich verstanden habe, wird ein Pointer auf auf den IP Header Struct definiert. Ich verstehe aber nicht ganz was = (struct ip *)packet bedeuet. Auf was zeigt den nun der Pointer genau? Und warum weise ich den Buffer packet am Ende noch hinzu ?

Joghurt
16-03-2005, 17:49
iph zeigt danach auf die selbe Speicheradresse wie Packet. Der Cast ist notwendig, damit die beiden Pointer-Typen kompatibel werden.

Ryuu
16-03-2005, 18:28
Thanks, versteh ich des richtig dass der Pointer iph vom Typ struct ip ist, packet vom Typ char und ich deswegen diesen Typecast machen muss?

Joghurt
16-03-2005, 20:59
Nein, packet wird vom Typ BLABLA* sein, wobei BLABLA irgendeine struct ist, deren ersten Bytes mit denen von struct ip übereinstimmen. Nur weiss dies der Compiler nicht, wenn du
struct ip* iph = packet; schreibst, und sieht nur, dass du einen Pointer auf struct ip mit einem Pointer auf etwas ganz anderes Initialisieren willst, und wird sich weigern.

Wenn du dem Compiler aber jetzt sagst, dass der packet einfach als Pointer auf struct ip auffassen soll, gibt es kein Problem mehr.

Ryuu
17-03-2005, 07:41
Jetzt hats *klick* gemacht. Danke, nun ist mir einiges klarer :D