Quelltxt
-
Hallo Leute. Habe ein Problem. Ich soll bis Freitag diesen Quelltext verstehen und erweitern. Nur leider verstehe ich hier garnichts... Kann mir irgendjemand helfen? Hier nochmal die Aufgaben stellung: "Sie erhalten den C-Code (auszugsweise) sowie ein Binary für ein Programm, welches einen Dump ähnlich der obigen Tabelle einliest und den Lern- und Weiterleitungsalgorithmus einer MAC-Brücke nachempfindet. Ihre Aufgabe ist es, die Funktionen zum Aufräumen der FDB (fdb_clean) und zur Aktualisierung der FDB (fdb_aktualisieren) zu implementieren. Im Anschluss ist die Funktionsfähigkeit durch Einlesen eines selbst erstellten Dumps zu überprüfen."
Es wäre nett wenn ihr mir in irgendeienr weise helfen könntet!!!
#include "fdb.h" /** * Informationen zur Nutzung der Software ***************************/ void usage (char *name) { fprintf (stdout, "%s [-v] [-a size] -i <file> [-o <file>]\n", name); fprintf (stdout, "-i <file> Dump mit den Paketinformationen\n"); fprintf (stdout, "-o <file> als OUTPUT sonst STDOUT\n"); fprintf (stdout, "-a size Größe der FDB als zweier Potenz [3...12]\n"); fprintf (stdout, "-v Verbose\n"); } struct handle_struct * parse_option (int argc, char **argv) { static struct handle_struct handle; int c; extern char *optarg; extern int optind; /* init */ memset (&handle, 0, sizeof (handle)); handle.in = stdin; handle.out = stdout; while ((c = getopt (argc, argv, "a:o:i:hv")) != -1) switch (c) { case 'h': usage(argv[0]); exit(0); break; case 'v': handle.verbose = 1; break; case 'a': handle.array_size = (unsigned short) atoi (optarg); break; case 'i': handle.in = fopen (optarg, "r"); if (NULL == handle.in) { fprintf (stderr, "could not open infile %s\n", optarg); exit (1); } break; case 'o': handle.out = fopen (optarg, "w"); if (NULL == handle.out) { fprintf (stderr, "could not open outfile %s\n", optarg); exit (2); } break; } if ((handle.array_size < 3) || (handle.array_size > 12)) { (void) fprintf (stderr, "Die Größe des Arrays muss angegeben werden\n"); exit (3); } handle.fdb = calloc ((1 << handle.array_size), sizeof (struct fdb_struct)); if (NULL == handle.fdb) { (void) fprintf (stderr, "Nicht genug Speicher für das Array\n"); exit (4); } memset (handle.fdb, 0, (sizeof (struct fdb_struct) * (1 << handle.array_size))); return &handle; } int main (int argc, char **argv) { struct handle_struct *handle; struct packet_struct packet; unsigned short hash; size_t n; handle = parse_option (argc, argv); do { n = fread (&packet, 1, sizeof (packet), handle->in); if (0 == n) break; if ((n < sizeof (packet)) || (0x800 != packet.type)) { fprintf (stderr, "Die Eingabedatei ist defekt oder ... %d\n", n); break; } if (handle->verbose) { fprintf (handle->out, "%s\n", print_packet (&packet)); fprintf (handle->out, "hash: %u\n", myhash (&(packet.src[0]), handle->array_size)); } /* aktualisiere Eintrag in der FDB */ hash = myhash (&(packet.src[0]), handle->array_size); fdb_aktualisieren (handle, &packet, hash); /* lösche alle veralteten Einträge */ fdb_clean (handle, packet.timestamp); /* welcher Port soll als Ausgang genutzt werden? */ hash = myhash (&(packet.dest[0]), handle->array_size); if (handle->fdb[hash].last_timestamp < 1) { fprintf (handle->out, "Ziel (%u) nicht in FDB --> Broadcast!\n", (packet.dest[0]<<16)+(packet.dest[1]<<8)+(packet.dest[2])); } else { fprintf (handle->out, "Packet über Port %u zustellen\n", handle->fdb[hash].port); } /* FDB ausgeben */ fdb_print (handle); } while (!feof (handle->in)); /* end while */ fcloseall (); return 0; }
-
Und wo genau hast du jetzt Probleme? Wenn es schon beim Grundaufbau hapert, hättest du im Unterricht besser aufpassen sollen
-
taikahn schrieb:
Es wäre nett wenn ihr mir in irgendeienr weise helfen könntet!!!
dann musste schon was konkretes fragen. weisst du nicht, wie das mit der 'forwarding database' funktioniert, oder worum geht's?
-
Naja ic hverst schon garnciht dne Grundaufbau. hatte vor 4 Jahren mal c und komem einfach ncith mehr rein. Unserer Prof hat uns voll ins Wasser geschmießen... Ich weiß nicht wie das alles zusmamenhängt undso.. Bräucht soweas wie ne analyse.
-
Kauf dir ein gutes Buch zu C und dann zerleg das Programm stückweise in seine Bestandteile. Wenn du zu einem bestimmten Sprachelement Fragen hast, kannst du gerne damit zurückkommen.
Edit: Und wo du einmal in Richtung Buchladen unterwegs bist - kauf dir bitte gleich noch einen Duden.
-
CStoll schrieb:
Kauf dir ein gutes Buch zu C ...
kaufen muss man zum glück nix. es gibt ohne ende tutorials und lehrbücher im netz. hier, z.b. --> http://www.beej.us/guide/bgc/output/print/bgc_A4.pdf
taikahn: aber bis freitagkannste's wohl knicken, wenn dein C-wissen total eingerostet ist.