Aufgabe 4

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Aufgabe 4
cp /proj/i4sp/pub/aufgabe4/plist.o .
Permission denied


Sehr komisch, die Dateiberechtigungen müssten doch eigentlich stimmen?

-rw-r--r-- 1 mike     i4sp  1324 2009-11-16 08:53 plist.o

Da fehlt was:

drwxrws---   2 mike i4sp     512 18. Nov 16:00 aufgabe4/

fixed


Danke jetzt gehts.

Hab jetzt auch gleich mal einen kleinen “Test” geschrieben: http://wwwcip.informatik.uni-erlangen.de/~simigruh/clash_test.sh Dieses Skript zur clash Binary ins Verzeichnis und ausfuehren. Dieses Skript piped diverse (ungewoehnliche) Eingabe Zeilen in die Clash. Es soll lediglich festgestellt werden ob die Clash nicht abstuerzt bei Eingaben wie Leereeingabe, nur ein &, etc … die Funktionalitaet muss selbst geprueft werden.


Ups, dein Skript hat in meiner (zugegeben sehr eilig runtergetippten) Lösung tatsächlich noch einen ärgerlichen Fehler aufgedeckt. :slight_smile:


gibts nen Grund, warum auf der HP die Beschreibung

und die Aufgabenstellung die Beschreibung

hat?


Wie benutze ich denn das Programm sp_wait?

My PID: 1945
Try
 kill 1945
        to terminate without core dump (SIGTERM)
 kill -QUIT 1945
        to terminate with core dump (SIGQUIT)

Programm reagiert aber nicht auf meine Eingaben “kill 1945” bzw. “kill -QUIT 1945”. Irgendwas mach ich da falsch^^


kill ist ein Programm, mit dem Du einem Prozess ein Signal zustellen kannst. Das Signal führt zum Tod von sp_wait. Das der Prozess sich in diesem Fall nicht selbst beendet hat, kann man nachher am mit wait ausgelesenen status erkennen. (WIFSIGNALED, WTERMSIG).

Du musst kill also auf einer anderen Shell aufrufen, während sp_wait gerade in Deiner clash gestartet ist.


Wie kann ich denn das Limit für eine Zeile der Eingabe abfragen?
Die maximale Länge eines Pfades bekomme ich ohne Probleme über PATH_MAX, nur mit LINE_MAX (das ebenso aus der limits.h kommt) klappt das nicht (->“LINE_MAX undeclared”).
Was mache ich falsch?


Das Problem hatte ich auch… jetzt benutze ich es eben nicht. Würde mich trotzdem interessieren, was ich falsch mache.
Und ich habe ein weiteres Problem: Bei der Abgabe wird mir mitgeteilt “src/clash.c nicht vorhanden.”
Aber clash.c befindet sich in src (ebenso wie plist.c, plist.h und das Makefile) und ich verstehe nicht, wieso es diesmal nicht funktioniert, die anderen Male lief es ja auch ohne Probleme.


Edit: mein Fehler, habe das Problem im Abgabesystem gefunden und behoben!


wegen LINE_MAX: so wie ich das den Headern entnehme, ist das Compile-Time Makro LINE_MAX leider erst in POSIX.2 verfügbar. Da wir POSIX.1 verwenden, ist es daher nicht definiert. Was aber funktioniert ist die Bestimmung zur Laufzeit mittels sysconf(_SC_LINE_MAX). Leider muss man hier dann natürlich den Speicher dynamisch allokieren…


Mir ist am Testprogramm eine Funktionalität aufgefallen, die nicht in der Aufgabenstellung beschrieben ist:

Gebe ich nur “cd” ein ohne folgende Parameter, wechselt er ins home Verzeichnis. Mein Programm gibt da bisher noch eine Fehlmeldung aus: “… : Bad address”.

Sollen wir dieses “feature” auch implementieren?


Das steht euch frei. Anstatt [m]chdir()[/m] mit einem [m]NULL[/m]-Zeiger aufzurufen und dafür ein “Bad address” zu kassieren, wäre es aber geschickter, diesen Fall vorher abzufangen und eine Meldung à la “Invalid number of arguments” auszugeben.


gibt es eigentlich eine methode herauszufinden, wie lang der aktuelle pfadname, den man ueber getcwd bekommt maximal ist, oder muss man hier auch wieder dynamisch allokieren?


Du kannst [m]PATH_MAX[/m] aus der [m]limits.h[/m] verwenden.


//Hier stand mal schwachsinn


Ist das so gewollt, dass das Testprogramm, wenn man nur & eingibt einen Prozess startet?


/proj/i4sp/pub/aufgabe4: &
/proj/i4sp/pub/aufgabe4:
Signal [&] = 11
/proj/i4sp/pub/aufgabe4: