24.02.2013 Aufrufe

Einf ¨uhrung in UNIX - CIS

Einf ¨uhrung in UNIX - CIS

Einf ¨uhrung in UNIX - CIS

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

208 2 <strong>UNIX</strong><br />

sec = time((long *) 0) + 3600; /* MEZ = GMT + 3600 */<br />

p = gmtime(&sec);<br />

pr<strong>in</strong>tf("%s %d. ", ptag[p->tm wday], p->tm mday);<br />

pr<strong>in</strong>tf("%s %d ", pmon[p->tm mon], p->tm year +1900);<br />

pr<strong>in</strong>tf("%d:%02d MEZ\n", p->tm hour, p->tm m<strong>in</strong>);<br />

}<br />

Programm 2.40 : C-Programm zur Anzeige der Systemzeit<br />

Nun wollen wir dieselbe Aufgabe mit e<strong>in</strong>em FORTRAN-Programm<br />

bewältigen. Der <strong>UNIX</strong>-Systemaufruf time(2) bleibt, für die C-Standardfunktion<br />

gmtime(3) suchen wir die entsprechende FORTRAN-Rout<strong>in</strong>e. Da<br />

wir ke<strong>in</strong>e f<strong>in</strong>den, müssen wir sie entweder selbst schreiben (was der erfahrene<br />

Programmierer scheut) oder nach e<strong>in</strong>em Weg suchen, e<strong>in</strong>e beliebige C-<br />

Standardfunktion <strong>in</strong> e<strong>in</strong> FORTRAN-Programm h<strong>in</strong>e<strong>in</strong>zuquetschen.<br />

Der Systemaufruf time(2) macht ke<strong>in</strong>en Kummer. Er benötigt e<strong>in</strong> Argument<br />

vom Typ Po<strong>in</strong>ter auf long <strong>in</strong>teger, was es <strong>in</strong> FORTRAN gibt.<br />

Der Rückgabewert ist vom Typ long <strong>in</strong>teger, auch ke<strong>in</strong> Problem. Die C-<br />

Standardfunktion gmtime(3) erwartet e<strong>in</strong> Argument vom Typ Po<strong>in</strong>ter auf<br />

long <strong>in</strong>teger, was machbar wäre, aber ihr Ergebnis ist e<strong>in</strong> Po<strong>in</strong>ter auf e<strong>in</strong>e<br />

Struktur. Das hat FORTRAN noch nie gesehen 42 . Deshalb weichen wir auf<br />

die C-Standardfunktion ctime(3) aus, deren Rückgabewert vom Typ Po<strong>in</strong>ter<br />

auf character ist, was es <strong>in</strong> FORTRAN näherungsweise gibt. In FORTRAN<br />

ist e<strong>in</strong> Zeichen e<strong>in</strong> Str<strong>in</strong>g der Länge e<strong>in</strong>s. Str<strong>in</strong>gs werden per Deskriptor übergeben.<br />

E<strong>in</strong> Str<strong>in</strong>g-Deskriptor ist der Po<strong>in</strong>ter auf das erste Zeichen und die<br />

Anzahl der Zeichen im Str<strong>in</strong>g als Integerwert. Das Programm sieht dann so<br />

aus:<br />

program zeit<br />

$ALIAS foratime = ’spr<strong>in</strong>tf’ c<br />

<strong>in</strong>teger*4 time, tloc, sec, ctime<br />

character atime*26<br />

sec = time(tloc)<br />

call foratime(atime, ’%s’//char(0), ctime(sec))<br />

write(6, ’(a)’) atime<br />

end<br />

Programm 2.41 : FORTRAN-Programm zur Anzeige der Systemzeit<br />

Die ALIAS-Anweisung ist als Erweiterung zu FORTRAN 77 <strong>in</strong> vielen<br />

Compilern enthalten und dient dazu, den Aufruf von Unterprogrammen anderer<br />

Sprachen zu ermöglichen. Der Compiler weiß damit, daß das Unterprogramm<br />

außerhalb des Programms – zum Beispiel <strong>in</strong> e<strong>in</strong>er Bibliothek –<br />

42 FORTRAN 90 kennt Strukturen.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!