Virtuelles File System in C schreiben
-
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
-
ooa@web.de schrieb:
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
ooaIrgendwie dreist aber bei den ganzen Losern im Thread würde es mich nicht wundern, wenn tatsächlich jemand 750€ dafür aufbringt
-
Was ist daran dreist? - Er hat ein Angebot gemacht, nicht mehr nicht weniger. Es gibt Unternehmen die für weniger Umsetzungsaufwand das x-Fache bezahlen.
-
blub121312 schrieb:
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!Solche mütterlichen Ratschläge gabs früher nicht.