Virtuelles File System in C schreiben
-
Wutz schrieb:
Außerdem kannst du auch nicht rechnen, +10 ist zu klein.
Ahh, ich kann doch noch zählen :p . Ich hatte schon gedacht, so ein dummer Fehler kann's nicht sein.
Daher benutzt man besser eine narrensichere Methode, die die nötige Größe bestimmt, anstatt dass man selber zählt. Dann kann man das Literal später auch noch ändern und es funktioniert trotzdem noch.
-
Wutz schrieb:
Du zeigst nicht den ganzen Code.
Außerdem kannst du auch nicht rechnen, +10 ist zu klein.Aha "structure" = 9 + 1 für das Ende-Zeichen = 10
Was ist daran falsch?
-
SeppJ schrieb:
Viele Pfade führen aus deiner Funktion, bei denen der Speicher nicht korrekt freigegeben wird. Weiterhin schreibst du irgendwo hinter ein von dir reserviertes Feld, was ebenfalls ein sehr ernstes Problem ist. Die Zeilennummern sagen dir, wo.
Wie meinst du das? Ich reserviere mir doch direkt den ganzen Speicher den ich brauche...und ich habe überprüft ob die Pfade richtig zusammengebaut werden.
-
C_Mond schrieb:
Wutz schrieb:
Du zeigst nicht den ganzen Code.
Außerdem kannst du auch nicht rechnen, +10 ist zu klein.Aha "structure" = 9 + 1 für das Ende-Zeichen = 10
Was ist daran falsch?Aber da steht nicht "structure". Guck noch mal genau hin. Und bevor du das jetzt einfach zu 11 änderst, denkst du mal daêüber nach, wie du das besser machen könntest, ohne magic numbers. Und damit meine ich nicht
const int length = 11;
.
-
C_Mond schrieb:
SeppJ schrieb:
Viele Pfade führen aus deiner Funktion, bei denen der Speicher nicht korrekt freigegeben wird. Weiterhin schreibst du irgendwo hinter ein von dir reserviertes Feld, was ebenfalls ein sehr ernstes Problem ist. Die Zeilennummern sagen dir, wo.
Wie meinst du das? Ich reserviere mir doch direkt den ganzen Speicher den ich brauche...und ich habe überprüft ob die Pfade richtig zusammengebaut werden.
Ja, du reservierst den Speicher. Das ist ja das Problem, denn er wird nicht mehr unbedingt frei gegeben. Bloß in einem von vier Fällen, die ich sehe. Und da zähle ich mögliche, mir unbekannte, Nebeneffekte von storeDateiErzeugen nicht mit.
Ich glaube, dir täte mal etwas Strukturierung gut:
http://en.wikipedia.org/wiki/Structured_programming
Dogmatisches Anhängen an strukturierter Programmierung ist zwar etwas aus der Mode, aber das liegt nicht da dran, dass es schlecht wäre, sondern da dran, dass es praktisch jeder so beigebracht bekommen hat und ohnehin immerzu benutzt und man dadurch die paar Ausnahmen deutlich sieht, in denen es nicht die beste Vorgehensweise ist.
Du hast derzeit sehr viele verschiedene Ausführungspfade und scheinst selber total den Überblick verloren zu haben, wenn du mit meinem Hinweis nichts anfangen konntest.
-
Okay ich bin nun mal ein Neuling sonst wäre ich ja nicht hier um Hilfe zu suchen.
Den Code fand ich bis jetzt eigentlich übersichtlich.Könntest du mir einfach mal die 4 Fälle nennen die du siehst?
-
Alle return, die vor den free stehen.
-
Dankeschön euch allen damit kann ich weiterarbeiten.
-
Ich komm mit der defragmentierung einfach nicht zurecht, bzw. eine Vorgehensweise/Algorithmus hätte ich schon, aber programmiert bekomme ich es nicht.
Meine "FAT"
Datei1,1,3,6,7
Datei2,2
Datei3,8,9,10
Datei4,4,11,12So sieht die Datei aus. Neue Dateien werden schon automatisch in aufsteigender Reihenfolge geschrieben. Dazwischen können natürlich lücken entstehen, wenn Dateien gelöscht werden.
Nun meine Überlegung.... Ich weiss das die Dateien in der FAT 11 Blöcke belegen. Also brauche ich, um eine defragmentierte FAT zu erhalten, die Blöcke 0-10.
Ich fange mit dem niedrigsten Block an (also 0). Dabei schaue ich, ob der aktuell bearbeitete Block der Block 0 ist oder ob dieser Block bereits bei einer anderen Datei in Benutzung ist. Daraus ergibt sich folgendes Bild...
Datei1,0,3,6,7
....
Problematisch wird es dann erst bei Block 2, da der schon vergeben ist. Dafür muss aber einfach, das ganze Szenario 2 mal durchlaufen werden.
Erster durchgang ergibt dann:
Datei1,0,1,3,5
Datei2,6
Datei3,7,8,9
Datei4,10,11,12
Zweiter Durchgang (Nun ist block 2 frei):
Datei1,0,1,2,3
Datei2,4
Datei3,5,6,7
Datei4,8,9,10Eigentlich relativ simpel. Aber jetzt in der Datei hin und her zu springen, mit 3 oder 4 verschachtelten Schleifen, mit fgets, strtok, ftell und was man noch alles braucht wird es mir einfach zu viel.
Übersehe ich vielleicht einen einfachen weg die Datei auseinander zu nehmen um meine Bedingungen zu prüfen?
-
Gerade kam mir noch ein guter Einfall....ohne die Datei müsig auseinander zunehmen mit strtok, müste es ja reichen jede zeile mit strstr(Buffer,",3,") zu durchsuchen, um festzustellen ob ein Block in Benutzung ist....
-
Hallo, ich denke ich konnte bis jetzt alle Speicherleckfehler erfolgreich beheben. Dankeschön.
Im Moment habe ich folgendes Problem. An einigen Stellen überprüfe ich, ob es eine Datei schon gibt mit folgendem code
FILE *datei; String* pfad; datei = fopen(pfad, "r+"); if(datei == NULL) { printf("Datei ist NULL"); } else { print("Die Datei ist nicht NULL"); }
Bei mir auf dem PC (Windows oder Linux) funktioniert das auch. Habe es auch schon gedebuggt. Aber sobald ich die Datei an das automatische Prüfsystem schicke ist die Datei nicht NULL. Leider kann ich dort nicht debuggen aber meine Logausgaben sagen, dass er auch in die falsche Bedingung läuft.
Das verstehe ich einfach nicht. Kann es sein, dass das Programm auf einer anderen Linuxmaschine anders reagiert???
-
Äh natürlich nicht String* sondern char*
-
Das ist eine Programmieraufgabe für Informatik aus dem aktuellen Sommersemester der Heinrich Heine Universität Düsseldorf Sommersemester2013. Es scheint du hast in den Vorlesungen nicht aufgepasst.
-
Rechnen Sie damit, dass ein unge¨ ubter C-Programmierer zwei bis drei Wochen Vollzeit zur
L¨osung der Aufgabenstellung ben¨ otigt. Fangen Sie rechtzeitig an!Wenn Sie es nicht schaffen werden Sie nicht zur Klausur zugelassen
Plagiate f ¨ uhren zum Auschluss von der Veranstaltung.
-
C_Mond schrieb:
Hallo, ich denke ich konnte bis jetzt alle Speicherleckfehler erfolgreich beheben. Dankeschön.
Im Moment habe ich folgendes Problem. An einigen Stellen überprüfe ich, ob es eine Datei schon gibt mit folgendem code
FILE *datei; String* pfad; datei = fopen(pfad, "r+"); if(datei == NULL) { printf("Datei ist NULL"); } else { print("Die Datei ist nicht NULL"); }
Ich will mal nicht so sein also wenn die Datei NULL ist sollte sich dein Programm auch beenden und mit einem bestimmten return wert rausspringen laut aufgabenstellung. So zum Pfad da muss auch ein string sein der ist noch undefiniert das kriegst du im übergabeparameter mitgeliefert also für pfad dynamisch speicher reservieren undzwar die länge des Dateinamen + strlen("store") oder strlen("structure") + 1 für die Terminierung dann mit strcpy und strcat erstellen. Z.b ./vfs myVFS create 10 10 dann muss in pfad auf einen string verweisen z.b myVFS.store bzw myVFS.structure. es klappt wahrscheinlich bei dir weil die datei die du öffnen willst vorher schon erstellt hast lösche sie mit rm oder mit der GUI.
meine persönliche meinung arbeite dich gründlich ein und gib das projekt nächstes mal ab dann wirst du auch die klausur gut bestehen weil so seh ich höhstens nur ne 4. Nicht als Beleidigung nehmen ist nur ein Ratschlag.
-
Wie wäre es wenn du dich in Zukunft einfach nur auf die Beantwortung meiner Frage konzentrierst anstatt irgendwelche Mutmaßungen anzustellen?
Wenn du außerdem meinen Post richtig gelesen hättest dann wüsstest du dass keine deiner Mutmaßungen auch nur annähernd zutrifft.
-
C_Mond schrieb:
Wie wäre es wenn du dich in Zukunft einfach nur auf die Beantwortung meiner Frage konzentrierst anstatt irgendwelche Mutmaßungen anzustellen?
Wenn du außerdem meinen Post richtig gelesen hättest dann wüsstest du dass keine deiner Mutmaßungen auch nur annähernd zutrifft.erzähl das dem weihnachtsmann soll ich die aufgabenstellung hochladen die übereinstimmt genau mit deinen forderungen naja ich denke das du es sowieso innerhalb der Zeit nicht schaffen wirst. Tja selber schuld
-
blub121312 schrieb:
Plagiate f ¨ uhren zum Auschluss von der Veranstaltung.
Ahh, jetzt verstehe ich, wieso manche der Beteiligten an diesem Thread mich privat per PM angeschrieben haben, ob ich ihnen die Aufgabe gegen Geld lösen kann
-
C_Mond schrieb:
Das verstehe ich einfach nicht. Kann es sein, dass das Programm auf einer anderen Linuxmaschine anders reagiert???
Natürlich kann es sein, dass ein Programm ist einer anderen Umgebung (hosted environment lt. Standard) anders abläuft, das ist sogar die Regel, wenn im Programm auch noch auf externe Ressourcen (Datei,...) zugegriffen wird.
Außerdem kennt der C Standard auch keine Dateien, sondern allenfalls (File)Streams.Die prüfst falsch mit "r+", d.h. die Datei muss über Lese- und Schreibrechte verfügen. Besser wäre "r", obwohl dies auch nicht immer ausreicht.
Bei POSIX kannst du auf stat/access/open ausweichen, da gibt es explizite Existenz-Mechanismen für Dateien.
-
Hey also ich habe auch an der Heinrich Heine Universität in Düsseldorf studiert ich kenn auch die Aufgabenstellung. Als Beweis
spätester Abgabetermin frühester Zeitraum für das Kolloquium möglicher Klausurtermin
07.07.2013 15.07.2013 bis 19.07.2013 Hauptklausur, Nachklausur
08.09.2013 30.9.2013 bis 04.10.2013 Hauptklausur, Nachklausur
14.10.2013 04.11.2013 bis 08.11.2013 Nachklausureine Funktion z.b
3.2 ./vfs ARCHIVE add SOURCE TARGET
add f ¨ugt dem VFS eine neue Datei hinzu.
Diese Operation ben¨ otigt folgende Parameter:
Parameter Beschreibung
SOURCE Die Datei (Dateiname incl. Pfad), die in das VFS kopiert werden soll.
TARGET Der Name, den die Datei im VFS haben soll.
Der Aufruf kann folgende Werte zur¨uckliefern:
R¨uckgabewert Bedeutung
0 Das Kommando wurde fehlerfrei ausgef¨uhrt.
2 Das VFS konnte nicht gef¨ offnet werden.
11 Eine Datei mit diesem Dateinamen existiert bereits (existierende Dateien d¨ urfen
nicht ¨uberschrieben werden).
12 Nicht gen¨ugend freier Speicherplatz im VFS.
13 Die Quelldatei existiert nicht.
Beispiele f ¨ ur den Aufruf:habe nämlich noch alle Zugangsdaten. Ich kann euch dieses Programm erstellen. Ich verlange für das Programm 750€ dabei erstelle ich euch ein professionelles Programm mit allen Anforderungen und aus Abschnitt 4 + detailierte Fehlerausgaben(welche nicht gefordert sind) und werde es euch auch detailiert erklären damit ihr das Kolloqium besteht. Ich werde euch das Programm auf meinem Laptop zeigen und wenn es euch gefällt dann kauft Ihr es oder nicht und zahlt nix, nachdem Ihr es gekauft habt erklär ich euch das detailiert unzwar vor Ort und nicht durchs Internet. Auch alle Nachkorrekturen die gemacht werden sollen werde ich dann umsonst machen. Selbstverständlich ist dann diese Aufgabe ein unikat bzw kein Plagiat. Wenn ihr Interesse habt dann meldet euch bei mir unter ooa@web.de.
Beeilt euch mit eurer Entscheidung weil ich kann nur eins erstellen soll ja ein unikat sein.
mfg
ooa