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.

206 2 <strong>UNIX</strong><br />

Die Aufgabenverteilung zwischen Schlüsselwörtern, Systemaufrufen und<br />

Standardfunktionen ist <strong>in</strong> gewissem Umfang willkürlich. Systemaufrufe erledigen<br />

Aufgaben, die aus dem Aufbau und den kennzeichnenden Eigenschaften<br />

des Betriebssystems herrühren, bei <strong>UNIX</strong> also <strong>in</strong> erster L<strong>in</strong>ie<br />

• E<strong>in</strong>- und Ausgabe auf unterster Stufe,<br />

• Umgang mit Prozessen,<br />

• Umgang mit dem File-System,<br />

• Sicherheitsvorkehrungen.<br />

Nach außen def<strong>in</strong>iert die Menge der Systemaufrufe das Betriebssystem. Zwei<br />

Systeme, die <strong>in</strong> ihren Aufrufen übere<strong>in</strong>stimmen, s<strong>in</strong>d für den Benutzer identisch.<br />

Neue Funktionalitäten des Betriebssystems stellen sich dem Programmierer<br />

als neue Systemaufrufe dar, siehe zum Beispiel unter stream(2).<br />

E<strong>in</strong>ige <strong>UNIX</strong>-Systemaufrufe haben gleiche oder ähnliche Aufgaben wie<br />

Shell-Kommandos. Wenn man die Zeit wissen möchte, verwendet man im<br />

Dialog das Shell-Kommando date(1). Will man diese Information aus e<strong>in</strong>em<br />

eigenen Programm heraus abfragen, kann man das <strong>UNIX</strong>-Shell-Kommando<br />

nicht verwenden, sondern muß auf den Systemaufruf time(2) zurückgreifen.<br />

Es ist aber nicht so, daß sich grundsätzlich Shell-Kommandos und Systemaufrufe<br />

entsprechen, es s<strong>in</strong>d nur e<strong>in</strong>ige Shell-Kommandos <strong>in</strong> C-Programme<br />

verpackte Systemaufrufe.<br />

In <strong>UNIX</strong> s<strong>in</strong>d Systemaufrufe Funktionen der Programmiersprache C. E<strong>in</strong>e<br />

Funktion übernimmt beim Aufruf Argumente oder Parameter und gibt e<strong>in</strong><br />

Ergebnis zurück. Dieser Mechanismus wird Parameterübergabe genannt.<br />

Man muß ihn verstanden haben, um Funktionen <strong>in</strong> eigenen Programmen verwenden<br />

zu können. E<strong>in</strong>e Erklärung f<strong>in</strong>det sich <strong>in</strong> Abschnitt ?? Parameterübergabe<br />

auf Seite ??.<br />

2.11.2 Beispiel Systemzeit (time)<br />

Im folgenden Beispiel wird der Systemaufruf time(2) verwendet. time(2)<br />

liefert die Zeit <strong>in</strong> Sekunden seit 00:00:00 Greenwich Mean Time, 1. Januar<br />

1970. Computeruhren laufen übrigens erstaunlich ungenau, falls sie nicht<br />

durch e<strong>in</strong>e Funkuhr oder über das Netz synchronisiert werden. Ferner brauchen<br />

wir die Standardfunktion gmtime(3), Beschreibung unter ctime(3),<br />

die aus den obigen Sekunden e<strong>in</strong>e Struktur erzeugt, die Datum und Uhrzeit<br />

enthält. Die Umrechnung von Greenwich auf Karlsruhe nehmen wir selbst<br />

vor. Eleganter wäre e<strong>in</strong> Rückgriff auf die Zeitzonen-Variable der Umgebung.<br />

Laut Referenz-Handbuch hat time(2) die Syntax<br />

long time ((long *) 0)<br />

Die Funktion verlangt e<strong>in</strong> Argument vom Typ Po<strong>in</strong>ter auf long <strong>in</strong>teger, und<br />

zwar im e<strong>in</strong>fachsten Fall den Nullpo<strong>in</strong>ter. Der Returnwert ist vom Typ long<br />

<strong>in</strong>teger. Der größte Wert dieses Typs liegt etwas über 2 Milliarden. Damit<br />

läuft diese Uhr etwa 70 Jahre. Die Subrout<strong>in</strong>e gmtime(3) hat die Syntax

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!