Voo suunamise juhis

Selles juhises räägime kuidas teha voo suunamist nii Windowsi kui Linuxi näitel. MacOS kasutajad peaksid jälgima Linuxi näidet – Linuxi ja Maci käsurida on käesolevate toimetuste jaoks samasugused (esineb siiski erinevusi mujal)

Meeldetuletuseks, voo suunamine on programmi sisendi või väljundi ümber suunamine. St me saame näiteks asendada sisendi lugemist klaviatuurilt etteantud sisendiga, mis on varasemalt ette valmistatud ja hoiustatud tekstifailis. Samuti saame asendada väljundi kuvamist terminaliaknas selle ümber suunamisega faili.

Selles juhendis käsitleme vaid sisendi ümbersuunamist.

Voo suunamine Linuxil

Antud juhend töötab olenemata millist Linuxi distributsiooni kasutad. St vahet pole kas sul on Linux Mint, Ubuntu, Kubuntu, Arch, SUSE või mõni teine Linux. Juhend kehtib ka MacOS kasutajatele.

Failide ettevalmistus

Voo suunamise teostamiseks on meil vaja kahte faili

  1. Programm, mida me testime. Programm peab küsima klaviatuurilt sisendit (näiteks tavaliste scanf()  lausetega). Programmi koodi voo suunamise jaoks muuta vaja ei ole.
    Linuxis ja Macis programmidel laiendit (file extension) ei ole.
  2. Tekstifaili, mis sisaldab sisendit, mida soovime anda. See sisendfail näeb välja täpselt samasugune nagu me oleksime tavaliselt programmi töö ajal klaviatuurilt sisendit trükkinud. Oluline on, et tegu on lihtsa tekstifailiga mille saad näiteks kirjutada valmis kasutades Geanyt. MS Wordi, Libreoffice’it ja teisi keerukaid redaktoreid kasutada ei tohi.
    Linuxis ja Mac OSis ei ole laiend tekstifailile vajalik, kuid võib kasutada .txt  laiendit

Tõenäoliselt on meil samas failis ka kolmas fail. Selleks on meie programmi kood. Sellest koodifailist saame me kompileerimise käigus programmi, mida meil on vajalik testida. Koodifail on .c  laiendiga.

Kaustast võid leida ka neljanda faili laiendiga .o  ning mitme sisendi või koodifaili olemasolul ka neid.

Loome vajalikud failid

NB! Kõik failid peavad minema ühte kataloogi sinu arvutis!

Esimese failina loome meie tekstifaili. Tekstifail loo soovitavalt kasutades Geanyt või mõnda teist lihtsat tekstiredaktorit. Anname nimeks  näiteks input.txt .

Teise failina on meie programmi lähtekood. Programm on lihtne – loeb kasutajalt maatriksisse salvestatavad väärtused ja seejärel trükib need joondatult välja. Anname nimeks näiteks matrix_print.c .

Kompileerime programmi

Lähtekood valmis, kompileeri programm.

NB! Pärast igat muudatust tuleb programm uuesti kompileerida! See kipub aeg-ajalt meelest minema kasutades voo suunamist. Salvestamine pole piisav.

Programmi jooksutamine voo suunamisega

Programmi jooksutamine käib käsurealt. Ära käivita oma programmi läbi IDE (nt Geany)!.

Ava käsurida

Kõige lihtsam meetod terminali avamiseks on esmalt võtta lahti failivaaturis kaust kuhu salvestasid oma failid. Tee hiirega paremklikk keset tühja kohta (ära vajuta faili peale!) ning vali “Open Terminal”.

Selle meetodi eelis on see, et su käsuviip avatakse koheselt õigesse kausta!

NB! Kui sinu kasutatav kasutajaliides ei võimalda avada käsuakent koheselt õiges kataloogis, ava enda süsteemiga kaasa tulnud terminali programm (nt terminal, console, command prompt vms). Seejärel navigeeri õigesse kausta.

Navigeerimiseks käsureal on käsk cd .  Kirjutades cd ..  lähed ühe kausta võrra kõrgemale oma kaustapuus. Kirjutades cd kaustanimi , lähed vastava nimega alamkausta. Enamik käsuaknaid toetavad ka täielikku adresseerimist, nt cd /home/risto/Desktop/stream_demo . Loomulikult asenda see asukoht enda arvutis oleva asukohaga. Käsuga ls  näed mis hetkel praeguses kaustas asub.

Veendume ja asukohas failides

Kui soovid veenduda, et su käsuviip asub õiges kohas ja ka kõik vajalikud failid on olemas, saame kasutada käsku ls . Veel parem, kasutame lisana -l  lippu (väike L) mis näitab meile ka detaile. Näiteks kirjutame ls -l .

Märka järgnevat

  1. Minu käsuviip asub aadressil ~/Desktop/stream_demo , mis on ühtlasi ka kaust kuhu ma selle demo jaoks failid salvestasin
  2. Selles kataloogis asuvad 3 faili. Minu lihttekstiline sisendfail ( input.txt ), minu programm ( matrix_read ) ja minu lähtekood ( matrix_read.c )
Programmi käivitamine

Programmi käivitamiseks käsurealt tavapäraselt (ilma suunamata) kirjutame me ./program , kus program  asenda käivitatava programmi nimega. Eesliides ./  ütleb, et käivitatav programm asub siin samas kaustas (punkt tähistab sama kausta, kus käsuviip asub).

Minu näitel oleks see ./matrix_read .

Programmi käivitamiseks koos voo suunamisega on struktuur järgmine: ./program < input_data_file .

Minu näitel oleks see jällegi . /matrix_read < input.txt .

Järgnev pilt on lõigatud kahte tulpa ruumi kokkuhoiuks.

NB! Käivitades programmi kasutades voo suunamist sisendit enam ekraanil ei näe!

Tüüpviga! Programmi lähtekoodi pole võimalik käivitada, käivitada saab vaid programmi! St kirjutada ei tohi ./matrix_read.c . 

Voo suunamine Windowsis

Windowsi puhul võib olla variatsioone sõltuvalt Windowsi versioonist. See tähendab ka variatsioone ühe suure versiooni sees (Näiteks ka Windows 10 enda sisemiselt on erinevusi, olenevalt mis aastal viimane uuendus on sooritatud!)

Juhend on koostatud klassikalise command prompt jaoks.

Esimene samm: failide ettevalmistus

Voo suunamise teostamiseks on meil vaja kahte faili

  1. Programm, mida me testime. Programm peab küsima klaviatuurilt sisendit (näiteks tavaliste scanf()  lausetega). Programmi koodi voo suunamise jaoks muuta vaja ei ole.
    Windowsis on käivitatava programmi laiendiks .exe .
  2. Tekstifaili, mis sisaldab sisendit, mida soovime anda. See sisendfail näeb välja täpselt samasugune nagu me oleksime tavaliselt programmi töö ajal klaviatuurilt sisendit trükkinud. Oluline on, et tegu on lihtsa tekstifailiga mille saad näiteks kirjutada valmis kasutades Geanyt, Notepadi vms. MS Wordi, LibreOffice’it ja teisi keerukaid redaktoreid kasutada ei tohi.
    Windowsis on tavapäraselt tekstifailide laiendiks  .txt .

Tõenäoliselt on meil samas failis ka kolmas fail. Selleks on meie programmi kood. Sellest koodifailist saame me kompileerimise käigus programmi, mida meil on vajalik testida. Koodifail on .c  laiendiga.

Kaustast võid leida ka neljanda faili laiendiga .o  ning mitme sisendi või koodifaili olemasolul ka neid.

Loome vajalikud failid

NB! Kõik failid peavad minema ühte kataloogi sinu arvutis!

Esimese failina loome meie tekstifaili. Tekstifail loo soovitavalt kasutades Geanyt või mõnda teist lihtsat tekstiredaktorit. Anname nimeks  näiteks input.txt .

Teise failina on meie programmi lähtekood. Programm on lihtne – loeb kasutajalt maatriksisse salvestatavad väärtused ja seejärel trükib need joondatult välja. Anname nimeks näiteks matrix_print.c .

Kompileerime programmi

Lähtekood valmis, kompileeri programm.

NB! Pärast igat muudatust tuleb programm uuesti kompileerida! See kipub aeg-ajalt meelest minema kasutades voo suunamist. Salvestamine pole piisav.

Programmi jooksutamine voo suunamisega

Programmi jooksutamine käib käsurealt. Ära käivita oma programmi läbi IDE (nt Geany)!.

Ava käsurida

Kõige lihtsam meetod terminali avamiseks on esmalt võtta lahti failivaaturis kaust kuhu salvestasid oma failid. Seejärel mine aadressireale ja kirjuta cmd  ning vajuta enter klahvi.

Selle meetodi eelis on see, et su käsuviip avatakse koheselt õigesse kausta!

Veendume ja asukohas failides

Kui soovid veenduda, et su käsuviip asub õiges kohas ja ka kõik vajalikud failid on olemas, saame kasutada käsku dirKasutades PowerShelli klassikalise Command Prompt asemel on selle käsu nimi ls  (nagu Linuxis).

Märka järgnevat

  1. Minu käsuviip asub aadressil C:\Users\Risto\Desktop\vood_naide , mis on ühtlasi ka kaust kuhu ma selle demo jaoks failid salvestasin
  2. Selles kataloogis asuvad 3 faili. Minu lihttekstiline sisendfail ( input.txt ), minu programm ( matrix_read.exe ) ja minu lähtekood ( matrix_read.c )
Programmi käivitamine

Programmi käivitamiseks käsurealt tavapäraselt (ilma suunamata) kirjutame me program.exe , kus program.exe  asenda käivitatava programmi nimega.

Minu näitel oleks see matrix_read.exe .

Programmi käivitamiseks koos voo suunamisega on struktuur järgmine: program.exe < input_data_file .

Minu näitel oleks see jällegi matrix_read.exe < input.txt .

Järgnev pilt on lõigatud kahte tulpa ruumi kokkuhoiuks.

NB! Käivitades programmi kasutades voo suunamist sisendit enam ekraanil ei näe!

Tüüpviga! Programmi lähtekoodi pole võimalik käivitada, käivitada saab vaid programmi! St kirjutada ei tohi matrix_read.c . 

Soovitusi paremaks töövooks

Programme luues tuleb sul tihedalt ette kompileerimist ja uuendatud programmi testimist. Mõned soovitused

  • Ära sulge käsuakent pärast programmi testimist. Jäta see lahti. Siis ei pea sa järgmine kord seda uuesti avama
  • Uuesti programmi testimiseks vajuta klaviatuurilt üles nooleklahvi  . Sedasi saad oma eelneva käsu uuesti ette tuua ilma seda uuesti kirjutamata. Nooleklahve kasutades saad liikuda ringi käskude ajaloos.
  • Ära unusta enne uuesti testimist kompileerida.
  • Programme saad samuti kompileerida käsurealt. Näiteks kirjutades
    gcc -o matrix_read -Wall -Wextra -Wconversion matrix_read.c  kompileerid lähtekoodifaili matrix_read.c  programmiks matrix_read . Kasutades ülesnoolt saad kähku liikuda käivitamise ja kompileerimise rea vahel. Windowsit kasutades lisa .exe  lõppu, st gcc -o matrix_read.exe -Wall -Wextra -Wconversion matrix_read.c

Veel nippe

  • Selle asemel, et kirjutada programmi või sisendi nimi täispikalt välja, kirjuta sellest välja 1-3 esimest tähemärki (vahel ka rohkem) ning vajuta tab  klahvi. See lõpetab faili nime ära sinu eest. Kui sama algusega on mitu faili või kausta, siis Windowsis vajuta tab klahvi kuniks õige nimi ette tuleb. Linuxi puhul kuvatakse sulle kõik võimalikud lõpud ning pead mõne tähemärgi juurde trükkima. Sedasi vähendad näpuvigade tekitamist ning säästad aega.
  • Oma programmi testimiseks võid teha mitu sisendfaili. Näiteks testimaks mullsorteerimise koodi tee üks fail, kus numbrid on juhuslikult, teine juba kasvavas järjekorras, kolmas kahanevas järjekorras, neljas kus on mõnda numbrit mitu korda. Sedasi saad kiiresti testida oma programme kõiksugu erinevate lähteandmetega.

Veel lugemist