24.02.2013 Aufrufe

Einf ¨uhrung in UNIX - CIS

Einf ¨uhrung in UNIX - CIS

Einf ¨uhrung in UNIX - CIS

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

210 2 <strong>UNIX</strong><br />

umgebung. Die Teile des Programms lassen sich e<strong>in</strong>fach <strong>in</strong> andere C-<br />

Programme übernehmen.<br />

Dieses Programm soll beim Aufruf (zur Laufzeit, <strong>in</strong> der Kommandozeile)<br />

den Namen des Files als Argument übernehmen, wie wir es von <strong>UNIX</strong>-<br />

Kommandos her kennen. Dazu ist e<strong>in</strong> bestimmter Formalismus vorgesehen:<br />

<strong>in</strong>t ma<strong>in</strong>(<strong>in</strong>t argc, char *argv[], char *envp[])<br />

Die Funktion ma<strong>in</strong>() übernimmt die Argumente argc, argv und gegebenenfalls<br />

envp. Das Argument argc ist der Argument Counter, e<strong>in</strong>e Ganzzahl.<br />

Sie ist gleich der Anzahl der Argumente <strong>in</strong> der Kommandozeile beim<br />

Aufruf des Programms. Das Kommando selbst ist das erste Argument, also<br />

hat argc m<strong>in</strong>destens den Wert 1. Das Argument argv ist der Argument<br />

Vector, e<strong>in</strong> Array of Str<strong>in</strong>gs, also e<strong>in</strong> Array of Arrays of Characters. Der erste<br />

Str<strong>in</strong>g, Index 0, ist das Kommando; die weiteren Str<strong>in</strong>gs s<strong>in</strong>d die mit dem<br />

Kommando übergebenen Argumente, hier der Name des gefragten Files. Der<br />

Environment Po<strong>in</strong>ter envp wird nur benötigt, falls man Werte aus der Umgebung<br />

abfragt. Es ist wie argv e<strong>in</strong> Array of Str<strong>in</strong>gs. Die Namen argc, argv<br />

und envp s<strong>in</strong>d willkürlich, aber üblich. Typ und Reihenfolge s<strong>in</strong>d vorgegeben.<br />

Die Umgebung besteht aus Str<strong>in</strong>gs (mit Kommando set (Shell) anschauen).<br />

In der for-Schleife werden die Str<strong>in</strong>gs nache<strong>in</strong>ander mittels der<br />

Funktion strncmp(3) (siehe str<strong>in</strong>g(3)) mit dem Str<strong>in</strong>g LOGNAME verglichen.<br />

Das Ergebnis ist der Index i des gesuchten Str<strong>in</strong>gs im Array envp[].<br />

Den Systemaufruf access(2) f<strong>in</strong>den wir <strong>in</strong> der Sektion (2) des Referenz-<br />

Handbuches. Er untersucht die Zugriffsmöglichkeiten auf e<strong>in</strong> File und hat die<br />

Syntax<br />

<strong>in</strong>t access(char *path, <strong>in</strong>t mode)<br />

Der Systemaufruf erwartet als erstes Argument e<strong>in</strong>en Str<strong>in</strong>g, nämlich den<br />

Namen des Files. Wir werden hierfür argv[1] e<strong>in</strong>setzen. Als zweites steht<br />

e<strong>in</strong>e Ganzzahl, die die Art des gefragten Zugriffs kennzeichnet. Falls der gefragte<br />

Zugriff möglich ist, liefert access(2) den Wert null zurück, der <strong>in</strong><br />

e<strong>in</strong>em C-Programm zugleich die Bedeutung von logisch falsch (FALSE) hat<br />

und deshalb <strong>in</strong> den if-Zeilen negiert wird.<br />

Den Systemaufruf stat(2) f<strong>in</strong>den wir ebenfalls <strong>in</strong> Sektion 2. Er ermittelt<br />

File<strong>in</strong>formationen aus der Inode und hat die Syntax<br />

#<strong>in</strong>clude <br />

#<strong>in</strong>clude <br />

<strong>in</strong>t stat(path, buf)<br />

char *path;<br />

struct stat *buf;<br />

Se<strong>in</strong> erstes Argument ist wieder der Filename, das zweite der Name<br />

e<strong>in</strong>es Puffers zur Aufnahme e<strong>in</strong>er Struktur, die die Informationen<br />

enthält. Diese Struktur vom Typ stat ist <strong>in</strong> dem <strong>in</strong>clude-File

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!