Programmer's Toolbox (7) - Weitere rekursive Kommandos

Zum zweiten Mal werden heute Kommandos betrachtet, die über die Fähigkeit zur Argumentexpansion verfügen. In der letzten Folge waren dies LS, CP und MV. Diese Liste wird heute erweitert um:

RM - Löschen von Dateien
RMDIR - Löschen von Verzeichnissen
MKDIR - Erzeugen von Verzeichnissen
CHMOD - Ändern des Dateizugriffsmodus
TOUCH - Aktualisierung der Modifikationszeit von Dateien

Die Kommandos RM und RMDIR

NAME

RM, RMDIR - Löschen von Dateien und Verzeichnissen

ANWENDUNG

RM [ -IR ] Dateiname...
RMDIR Verzeichnis...

BESCHREIBUNG

RM löscht eine oder mehrere Dateien. Besteht dabei ein Schreibschutz für die Dateien, dann wird zunächst abgefragt, ob die Datei wirklich gelöscht werden soll (Antwort "y").

RMDIR löscht alle angegebenen Verzeichnisse. RMDIR löscht jedoch nur leere Verzeichnisse.

OPTIONEN

-I Interaktivmodus. Beim Löschen einer Datei wird zunächst rückgefragt. Löschen erfolgt nur bei Eingabe von "y".
-R Rekursives Löschen des Inhalts eines Verzeichnisses, des Inhalts aller enthaltenen Unterverzeichnisse und des Verzeichnisses selber.

PROGRAMMIERUNG

Die Kommandos RM und RMDIR sind in Listing 1.14 und 1.15 programmiert.

Der Aufbau des Kommandos RM ähnelt dabei weitgehend dem Aufbau der bisher betrachteten rekursiven Kommandos. So lassen sich etwa in der Hauptfunktion rm (Zeilen 104-145) Programmstellen zur Optionsanalyse und zur Argumentexpansion finden. Es folgt der Aufruf der bereits vertrauten rekursiven Funktionskaskade zur Abarbeitung der DIR_DESC_LIST (Zeilen 139-144). Über rm_dlist (Zeilen 79-87) und rm_dir (Zeilen 67-77) wird dabei zur Funktion rm_flist (Zeilen 38-65) abgestiegen. An dieser Stelle erfolgt das Löschen, eventuell ein rekursives Löschen, das auch das Entfernen der betroffenen Verzeichnisse beinhaltet (Zeilen 50-54).

Betrachtet man RMDIR und vergleicht seine BESCHREIBUNG mit der von RM, dann fällt auf, daß RMDIR eigentlich funktional in RM enthalten. Entsprechend ist Listing 1.16 - die Implementierung von RMDIR -, bis auf Umbenennungen, auch nichts weiter als ein "abgespecktes" Listing 1.15. In rmdir (Zeilen 83-115) fehlen die Möglichkeiten zur Optionsinterpretation. Darüber hinaus fehlt in rmdir_flist (Zeilen 34-50) das Löschen von Dateien und der rekursive Abstieg.

Das Kommando MKDIR

NAME

MKDIR - Erzeugen von Verzeichnissen

ANWENDUNG

MKDIR Verzeichnis...

BESCHREIBUNG

MKDIR erzeugt Verzeichnisse. Die (unsichtbaren) Standardeinträge "." und ".." innerhalb von Verzeichnis werden dabei automatisch miterzeugt.

PROGRAMMIERUNG

Das Kommando MKDIR ist in Listing 1.17 programmiert. MKDIR bildet in gewissem Sinne eine Ausnahme von den übrigen Kommandos dieses Serienteils. Seine Ausnahmestellung resultiert daraus, daß MKDIR kein rekursives Kommando ist. Das Modul EXPAND wird entsprechend nicht benötigt. Wegen der nicht zu leugnenden Symmetrie zum Kommando RMDIR, wird MKDIR jedoch trotzdem in der heutigen Folge abgedruckt.

Seine Implementierung hält keine Überraschungen bereit. Entsprechend den Vorgaben unter BESCHREIBUNG versucht MKDIR sämtliche übergebenen Parameter als Verzeichnisse anzulegen. Optionen sind dabei nicht zulässig, weshalb die Implementierung sehr einfach wird und an dieser Stelle nicht weiter betrachtet werden soll.

Das Kommando CHMOD

NAME

CHMOD - ändern des Zugriffsmodus

ANWENDUNG

CHMOD [ +W ] [ -W ] Dateiname...

BESCHREIBUNG

Für die angegebenen Dateinamen wird der Schreibschutz entweder gesetzt (-W) oder zurückgenommen (+W).

PROGRAMMIERUNG

Das Kommando CHMOD ist in Listing 1.18 programmiert. Bis auf die Funktion chmod_flist (Zeilen 38-57) zeigt es nur Vertrautes. In der Funktion chmod_flist wird, entsprechend der Vorgabe (setrw), das Read-Only-Flag entweder für die betreffenden Dateien gesetzt oder entfernt (Zeilen 49-53). Dabei erfolgt eine Abbildung auf die GEMDOS-Funktion Fattrib.

Das Kommando TOUCH

NAME

TOUCH - Aktualisierung der Modifikationszeit von Dateien

ANWENDUNG

TOUCH Dateiname...

BESCHREIBUNG

TOUCH setzt den Zeitpunkt der letzten Modifikation aller übergebenen Dateinamen auf die Systemzeit.

PROGRAMMIERUNG

Das Kommando TOUCH ist in Listing 1.19 programmiert. Bis auf die Funktion touch_flist (Zeilen 35-52) zeigt es nur Vertrautes. In der Funktion touch_flist wird für die selektierten Dateien das Modifikationsdatum aktualisiert (Zeilen 45-48). Es erfolgt eine Abbildung auf die ATOM-Funktion touch.

Vorausschau

In der nächsten Folge ist es soweit: Die Shell wird implementiert. Dabei wird gezeigt, wie Shellvariable, Pipelining und Kommandoprozeduren realisiert werden können. Der erste Block der "Programmer's Toolbox" gelangt damit zu seinem Abschluß.

Listings Programmer's Toolbox (7)


Dirk Brockhaus
Aus: ST-Computer 01 / 1991, Seite 116

Links

Copyright-Bestimmungen: siehe Über diese Seite