Ohje kurssin UNIX-sovellusohjelmointi harjoitustyön tekemiseen Tämä ohje kuvaa kurssin harjoitustöiden minimivaatimukset. Kurssilla on kaksi harjoitustyötä, joissa molemmissa on tarkoitus harjoitella aiemmin luennoitujen funktiokutsujen käyttöä omissa ohjelmissa. Hyväksytyn harjoitustyön pitää täyttää seuraavat vähimmäisvaatimukset. Molemmille harjoitustyölle yhteiset vähimmäisvaatimukset: 1. 2-4 sivuinen oppimispäiväkirja, joka kuvaa harjoitustyön ohjelmoinnin vaiheet, eteen tulleet ongelmat ja ratkaisut. Kuvaus on vapaamuotoinen, mutta siitä tulee käydä ilmi, mitä ongelmia ja mielenkiintoisia asioita opiskelijalle tuli vastaan, ja mitä opiskelija oppi työtä tehdessään. Pohdintaa ongelmista ja ratkaisuista pitää olla. Samoin päiväkirjasta pitää käydä ilmi, miten koodia on testattu, mikä toimi ja mikä ei, sekä miten työtä voisi parantaa, ts. jatkokehitysideoita. Päiväkirja voi olla UNIX-muotoisessa tekstitiedostossa tai PDF-dokumenttina. Oppimispäiväkirjasta tai vastaavasta dokumentista pitää myös käydä ilmi, mikä on ohjelmiston arkkitehtuuri, rakenne ja toiminta (lue: ohjelman rakenne ja toiminta pitää selvitä muualtakin kuin lähdekoodista). Lisäksi dokumentaatiossa pitää osoittaa, miten ohjelma täyttää tässä ohjeessa esitetyt työn minimivaatimukset. 2. Hyvin kommentoitu lähdekoodi, joka - on modulaarinen, ts. koostuu useammasta modulista ja vähintään yhdestä omasta kirjastosta, - kääntyy ilman varoituksia "-Wall ja -pedantic" parametreilla Linux alustalla - sisältää lyhyen ohjeen ohjelman käytöstä, jos käyttäjä antaa väärän määrän parametreja tai esim. "-h" vivun, - kirjoittaa lokia tiedostoon siitä, mitä ohjelmassa tapahtuu, - suorittaa siistin lopetuksen, jos käyttäjä painaa CTRL-C, - ja, jossa funktiokutsujen onnistuminen ja virhetilanteet hoidetaan huolellisesti itse, luennon CHECK-makroa tai vastaavaa EI saa käyttää joka paikassa (ei edes uudelleen nimettynä :) ). 3. Toimiva Makefile, jolla saa käännettyä ohjelman kaikki komponentit ja itse suoritettavan ohjelman, sekä poistettua turhat objekti-tiedostot. 4. Ohjelman lyhyt käyttöohje ja kuvaus, mitä ohjelma ylipäänsä tekee. 5. Edellämainitut yhdessä tar.gz paketissa (tar czvf ht.tar.gz hakemisto/): - tiedoston nimi pitää olla "sukunimi-htNUMERO.tar.gz" - sisällä olevan hakemiston pitää olla "sukunimi" - ts. pistä tiedostot sukunimesi mukaiseen hakemistoon ja sano esim. "tar czvf manner-ht1.tar.gz manner/" Osa 1: Ohjelman pitää sisältää - tiedostoon kirjoittamista (väh. lokiviestien kirjoittamista) ja tiedostosta lukemista (jos ei muuta, niin vaikka konfiguraation lukemista. - signaalien käsittelyä (esim. tuo hallittu lopetus CTRL-C tilanteessa) - lapsiprosessi(e)n käsittelyä - lisäksi jotain seuraavista - koodin vaihto exec:n avulla - muistiinkuvattujen tiedostojen käsittelyä - tiedostojen lukitsemista - asynkronista tai blokkaamatonta I/O:ta Osa 2: Ohjelman pitää sisältää - Prosessien tai ohjelmien välistä kommunikointia eri muodoissa ja - Säikeiden luomista ja käsittelyä (synkronointia tms.) Vaatimuksien täyttymisestä ei automaattisesti saa pisteitä, vaan pisteytys perustuu harjoitustyön monipuolisuudelle ja ohjelmoinnin huolellisuudelle, sekä oppimispäiväkirjaan. Minimivaatimusten täyttyminen mahdollistaa vasta kurssilla jatkamisen. Pisteytys on siis 1-10 pistettä. Kukin on luonnollisesti oikeutettu saamaan palautetta omasta työstään. Pari vihjettä: -------------- - Lue tämä ohje oikeasti, ihan turha menettää pisteitä siksi, että on lukenut ohjeen huonosti. Jos jokin asia on epäselvä, kysy. - Käytä hyväksi luennolla opetettuja asioita, esim. sitä, miten signaalinkäsittelijä kannattaa oikeasti tehdä. - Tee mieluummin yksinkertainen, vaatimukset täyttävä ohjelma, kuin iso ja hieno, joka on jäänyt "hieman" kesken. - Aloita homma ajoissa, aikaa on oikeasti paljon, luentotaukojakin on monta. Ohjelmoinnissa tulee aina eteen ihmeellisiä ongelmia, joiden selvittämiseen menee aikaa. - Kirjastot käännetään mukaan ohjelmaan "-l" ja mahd. "-L ja -I" vivuilla. Kirjaston nimen pitää olla "libjotain.a", joka käännetään mukaan vivuilla "-ljotain -L. -I.". Katso "man gcc", noin rivi 5171 alkaen CSL:n manuaalisivuilla - Koodin kommentointia on mm. keskeisten toimintojen/logiikan kommentointi ja funktioiden esittely (mitä saa parametreina, mitä palauttaa normaalisti tai virhetilanteessa). - Lokiviestit voi toteuttaa "quick-and-dirty" tavalla, joka laskee pisteitä tai hyvin. Huono tapa on avata lokitiedosto erikseen jokaisella kerralla, kun sinne halutaan kirjoittaa, ja kirjoittaa ilman mitään tarkastuksia. Hyvä tapa on avata loki kerran ja kirjoittaa sinne kontrolloidusti, tarkastaen myös, mikä oli write-kutsun paluuarvo(!). write-kutsu on käyttöjärjestelmän palvelukutsu ja siis atominen operaatio. Rinnakkaiset write-kutsut samaan tiedostoon eivät limity, vaan ne suoritetaan peräkkäin. - Tässä ohjeessa on siis määritelty minimivaatimukset, edistyneempiäkin toimintoja ja funktioita saa käyttää, kunhan vähimmäistoiminnallisuus toteutuu myös. - FILE-osoitin pohjaisia kutsuja saa myös käyttää tiedostojen käsittelyssä, jos ne sopivat paremmin tiettyihin toimintoihin. Perustele kuitenkin valintasi. - Jos koodaat muulla alustalle kuin Linux, varmista, että koodisi kääntyy myös Linux ympäristössä.