Abgabe: spätestens 15.2.2007
Minix hat nur ein recht simples Druckerspooling (realisiert durch lp.c und lpd.c in /usr/src/commands/simple), das dem Benutzer kaum Komfort bietet. Man kann weder die momentanen Druchaufträge auflisten noch einen abgesetzten Druchauftrag abbrechen. Diesen Mißstand gilt es zu beheben. Implementiert die zusätzlichen Kommandos lpq und lprm für die genannten Zwecke.
Das Kommando lpq soll den gegenwärtigen Zustand der Druckerwarteschlange anzeigen. Für jeden Auftrag in der Warteschlange soll folgende Information ausgegeben werden:
Das Kommando lprm soll Aufträge aus der Warteschlange löschen. Bei Angabe einer Nummer soll ein einzelner Auftrag entfernt werden, bei Angabe eines Benutzernames alle Aufträge eines Benutzers (vgl. lprm(1)). Außer root darf natürlich jeder benutzer nur die eigenen Druckaufträge löschen.
Achtung: Mit den neuen Kommandos können jetzt mehrere Prozesse auf die Druckerwarteschlange zugreifen. Dieser Zugriff muss synchronisiert werden! Analysiert kritische Zugriffe sowohl im vorhandenen wie auch im eigenen Code, und sichert diese durch das advisory file locking von fcntl(2).
Um das Drucksystem von Minix zu benutzen fügt bitte folgende Zeile eurer bochsrc hinzu:
parport1: enabled=1, file="parport.out"Dadurch wird die Druckausgabe in die Datei parport.out umgeleitet. Aktiviert in Minix selbst den Druckertreiber durch Setzen der Variable ENABLE_PRINTER in der Datei /usr/include/minix/config.h und erstellt einen neuen Kern.
Für Testzwecke empfiehlt es sich, den Druckvorgang in lpd.c durch Einfügen von sleep-Aufrufen zu verlangsamen.