Ohjelmointi Unixissa, luku 8 Ohjelmointi Fortran-kielellä:

Syöttö ja tulostus Fortran-ohjelmissa

Rivinvaihdon ohjaus

Rivikirjoitintulostuksessa Fortran-ohjelmasta kunkin rivin ensimmäinen merkki on ns. lomakkeenohjauskoodi: se ei tulostu vaan ohjaa rivinvaihtoa: välilyönti aiheuttaa normaalin rivinvaihdon, numero 0 kaksi rivinvaihtoa jne. Hyvin usein Fortran-ohjelmien tulostuslauseet ja formaatit kirjoitetaan tämän mukaisesti, ja siirrettävyyssyistä se onkin järkevää.

Rivikirjoitintulostusta ei kuitenkaan juurikaan enää käytetä, eikä useimpiin Unix-koneisiin edes ole liitetty perinteisiä rivikirjoittimia, vaan tulostus hoidetaan laserkirjoittimilla. Niille taas ei tulosteta suoraan vaan ohjaamalla tulostus tiedostoon ja sitten lähettämällä tiedosto kirjoittimelle sopivalla komennolla.

Monissa järjestelmissä lomakkeenohjauskoodit ovat voimassa ainakin rajoitetusti myös päätteelle tulostettaessa. Unix-järjestelmissä näin ei yleensä ole.

Esimerkiksi IBM:n Unix-toteutuksessa (Aix) lomakkeenohjauskoodien toimintaa voidaan kuitenkin simuloida käyttämällä Aixin pientä apuohjelmaa asa. Esimerkkejä käyttötavoista:

xyz | asa
suorittaa ohjelman siten, että sen tulostus päätteelle muotoutuu lomakkeenohjauskoodien mukaisesti
asa rslts
tulostaa päätteelle tiedoston rslts lomakkeenohjauskoodien mukaisesti
asa rslts | enscript
tulostaa laserkirjoittimelle tiedoston rslts lomakkeenohjauskoodien mukaisesti.

Kanavannumeroiden merkityksen määrittely

Jos kanavannumerolle halutaan muu kuin em. oletusmerkitys, voidaan kanavannumeron ja tiedoston vastaavuus esittää

Edellinen sopii käytettäväksi varsinkin silloin, kun ohjelma käyttää kiinteännimisiä tiedostoja. Unixissa kirjoitetaan tällöin tiedostonnimi sellaisenaan OPEN-lauseen FILE-argumenttiin heittomerkkien sisään, esim.

OPEN(UNIT=10,FILE='input.dat')

Jos kuitenkin halutaan esim. käsitellä samalla ohjelmalla useita erinimisiä tiedostoja, on joustavampaa antaa tiedostomäärittelyt ohjelman ulkopuolella. Tätä varten on kussakin käyttöjärjestelmässä omat komentonsa.

Unixissa voidaan e.m. tarkoitukseen käyttää erilaisia välineitä, joista yleiskäyttöisin on seuraavassa kuvattava tapa, joka perustuu ns. symbolisten linkkien käyttöön. Tällöin käytetään esimerkiksi muotoa

ln -s nimi fort.n

olevaa komentoa, missä n on kanavannumero ja nimi on haluttu tiedostonnimi, esimerkiksi

ln -s input.data fort.1

Tässä oletettu vastaavuus, jossa Fortranin ns. kanavannumeroa n vastaa tiedostonnimi fort.n, ei mitenkään välttämättä päde kaikissa järjestelmissä ja on ymmärrettävä lähinnä esimerkiksi. Tarkista asia kääntäjäkohtaisista ohjeista!

Tämä komento luo tiedostolle input.data toisen, rinnakkaisen nimen fort.1. Voimme myös sanoa, että se luo uuden tiedoston fort.1, joka kuitenkin on pelkkä "symbolinen linkki" tiedostoon input.data.

Ohjelman ajamisen jälkeen on symbolinen linkki syytä poistaa komennolla

rm fort.n

Muutoin nimittäin ei uusi ln-komento samalle kanavalle onnistukaan. Komennossa voidaan (erityisesti jos se esiintyy komentotiedostossa) antaa optio -f, jolloin komento ei "valita", vaikka kyseiselle nimelle ei olisi olemassa symbolista linkkiä. Huomaa, että symboliseen linkkiin kohdistettava rm-komento ei poista sitä tiedostoa, johon linkki viittaa, vaan vain linkin.

Symbolisella linkillä asetettu tiedostomäärittely on voimassa, kunnes se erikseen poistetaan rm-komennolla. Huomaa, että esim. yhteyden katkaisu (logout) ei poista symbolisia linkkejä, koska ne ovat tiedostojärjestelmään eivätkä vain pääteistuntoon liittyviä asioita.

Edellä esitetyllä tavalla asetetut, voimassaolevat symboliset linkit saa selville sellaisella ls-komennolla, jossa on optio -l, esimerkiksi

ls -l fort.*

Unixissa myös laitteisiin viitataan tiedostonnimillä. Tärkeimmät tällaiset nimet ovat

/dev/tty
käyttäjän pääte
/dev/null
"olematon laite"
Täten esimerkiksi tulostus kanavalle 12 voidaan ohjata päätteelle komennolla

ln -s /dev/tty fort.12

On kuitenkin huomattava, että tällöin tulostus on puskuroitua, ja päätteeltä lukemisen ja päätteelle tulostamisen järjestys ei välttämättä ole todellisuudessa sama kuin ohjelmakoodissa. Jos ohjelma esim. tulostaa kanavalle 12 ja sen jälkeen lukee päätteeltä, käy todennäköisesti niin, että se odottaa syöttötietoja ennen tulostamista.

Kanavannumeroiden oletusmerkitykset

Fortran-ohjelmissa tiedostoihin viitataan tunnetusti ns. kanavannumeroilla (unit numbers). Suosittelemme, että käytetään numeroita väliltä 1 - 99, joskin monissa järjestelmissä voidaan käyttää muitakin numeroita.

Jos kanavannumeron merkitystä ei muutoin ilmoiteta, niin Unix-järjestelmien Fortraneissa