Aufgabe 5


Wenn du ne Struktur hast, in der ein Pointer zu einem Verzeichniseintrag (oder: im Prinzip leichter und ausreichend: nur der Name des jeweiligen Verzeichniseintrages) und die vorher per (l)stat geholte dazu gehörende Zeit gespeichert sind, dann müsstest du nur eine Array solcher Strukturen (anhand der gespeicherten Zeit) sortieren, und schon klappt das auch mit der Zuordnung zu einem Verzeichniseintrag…

So als kleine Anregung :wink:


ah, ok, werde das mal testen :wink:

danke


jo, musst natürlich deine compare funktion, die du an qsort übergibst ändern…


Ich hätt da ne Frage:
Kann ich dem perror Werte von Variablen wie z. B. einem printf übergeben oder muss ich da suf was bestimmtes achten?
Mir gibt der Compiler als Fehlermeldung nämlich zurück, dass dem perror zu viele Argumente übergeben werden.


Da kannste einfach fix man 3 perror tippen und dann wirst du sehen, dass perror nur einen const char* nimmt und sonst nix.


Das geht leider nicht direkt, aber [m]perror()[/m] müsste eigentlich so ähnlich aussehen (ohne Gewähr):

void perror(const char *s)
{
    fprintf(stderr, "%s: %s\n", s, strerror(errno));
}

Anstatt [m]perror()[/m] zu verwenden, könntest du also ganz einfach so was in der Art schreiben:

fprintf(stderr, "Fehler bei irgendeiner Aktion: %s! var1 = %d, var2 = %d\n", strerror(errno), var1, var2);

Was dann z.B. diese Ausgabe erzeugen sollte:
[m]Fehler bei irgendeiner Aktion: Permission denied! var1 = 42, var2 = 4711[/m]


frage zum makefile:

soll der checkout auch ausgeführt werden übers makefile oder nicht?


ist PATH_MAX nur die maximale länge eines pfades bis zur datei ohne den namen der datei, oder enthält es auch noch den namen der datei?
ich hoffe ihr kapiert was ich fragen will ich habs wohl bissel umständlich formuliert.


Nö, nicht das ich wüsste.
Das makefile hat ja mit dem RCS ansich gar nichts zu tun.
Wenn die Datei printdir.c nicht da ist, dann ist sie eben nicht da.

Aber make ist recht klug.
Wenn die Datei printdir.c nicht vorhanden ist, dann wird diese selbstständig ausgechekt.

20:38:02 [~/codes/c/aufgabe5] ls Makefile RCS _darcs 20:38:04 [~/codes/c/aufgabe5] make co RCS/printdir.c,v printdir.c RCS/printdir.c,v --> printdir.c revision 4.2 done gcc -ansi -pedantic -D_XOPEN_SOURCE=500 -Wall -Werror -g -c printdir.c gcc -ansi -pedantic -D_XOPEN_SOURCE=500 -Wall -Werror -g -o printdir printdir.o 20:38:07 [~/codes/c/aufgabe5] ls Makefile RCS _darcs printdir printdir.c printdir.o 20:38:08 [~/codes/c/aufgabe5]


Du sprichst bestimmt von der Länge von d_name, oder?
Falls du dessen Länge brauchst, ist strlen() immer noch dein bester Freund.


im princip ja. weil ich ja den pfad bis zur datei und den dateinamen für strlen zusammen fügen muss, bis jetzt mach ich das in nen char array fester grösse (PATH_MAX), jetzt weiss ich aber nicht ob dafür nicht vielleicht auch PATH_MAX+NAME_MAX notwendig wäre, da ich ehrlich gesagt nicht viel lust habe das dynamisch zu allokieren wenn ich da drauf verzichten kann.


Mach’s dynmisch. Ist besser und im Grunde auch nicht viel schwerer.


PATH_MAX reicht als Arraygröße.


danke


Sollte eigentlich PATH_MAX + 1 heißen, du musst die 0 ja noch mitzählen.


wenn man in release # 3 vergessen hat die UID und GID bits zu überprüfen, dies dann aber im release #4 nachgeholt hat, muss man dann den release 3 nochmal bearbeiten und das dort auch einfügen weil es ja in der aufgabe eigentlich gefordert war ??


http://fsi.informatik.uni-erlangen.de/forumtest/thread/3238,1#6823


Da wirst Du ohnehin nicht drum rum kommen, oder weisst Du schon zur Compilezeit wieviele Dateien die Verzeichnisse enthalten die Du ausgeben sollst?


das ist klar da allokire ich den speicher auch dynamisch, aber wenn ich es nicht brauche will ich es auch nicht unbedingt machen (faul) :smiley:


ist PATH_MAX eigentlich portabel? ich mach sowieso #ifndef PATH_MAX, aber im Prinzip?