{"id":8265,"date":"2023-03-05T22:16:25","date_gmt":"2023-03-05T20:16:25","guid":{"rendered":"https:\/\/blue.pri.ee\/ttu\/?p=8265"},"modified":"2026-03-17T09:38:15","modified_gmt":"2026-03-17T07:38:15","slug":"pr2et6-makefile-ja-logimine","status":"publish","type":"post","link":"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/pr2et6-makefile-ja-logimine\/","title":{"rendered":"PR2ET6: Makefile ja logimine"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/pr2et6-makefile-ja-logimine\/#Praktikumi_materjal\" >Praktikumi materjal<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/pr2et6-makefile-ja-logimine\/#Praktikumi_ulesanded\" >Praktikumi \u00fclesanded<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/pr2et6-makefile-ja-logimine\/#Ulesande_osa_1_2_W06-1_Andmete_lugemine_tootlemine\" >\u00dclesande osa 1 \/ 2 [W06-1]: Andmete lugemine, t\u00f6\u00f6tlemine<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/pr2et6-makefile-ja-logimine\/#Nouded\" >N\u00f5uded<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/pr2et6-makefile-ja-logimine\/#Vihje\" >Vihje<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/pr2et6-makefile-ja-logimine\/#Testimine\" >Testimine<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/pr2et6-makefile-ja-logimine\/#Ulesande_osa_2_2_W06-2_Logimine\" >\u00dclesande osa 2 \/ 2 [W06-2]: Logimine<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/pr2et6-makefile-ja-logimine\/#Nouded-2\" >N\u00f5uded<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/pr2et6-makefile-ja-logimine\/#Vihjeid\" >Vihjeid<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/pr2et6-makefile-ja-logimine\/#Lisaulesanne_1_W06-3_Logimise_teek\" >Lisa\u00fclesanne 1 [W06-3]: Logimise teek<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/pr2et6-makefile-ja-logimine\/#Nouded-3\" >N\u00f5uded<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/pr2et6-makefile-ja-logimine\/#Lisaulesanne_2_W06-4_Lihtsustatud_CSV_failist_lugemine\" >Lisa\u00fclesanne 2 [W06-4]: Lihtsustatud CSV failist lugemine<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/pr2et6-makefile-ja-logimine\/#Nouded-4\" >N\u00f5uded<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/pr2et6-makefile-ja-logimine\/#Lahenduskaik\" >Lahendusk\u00e4ik<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/pr2et6-makefile-ja-logimine\/#Parast_seda_tundi_peaksid\" >P\u00e4rast seda tundi peaksid<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/pr2et6-makefile-ja-logimine\/#Taiendav_materjal\" >T\u00e4iendav materjal<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Praktikumi_materjal\"><\/span>Praktikumi materjal<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>Slaidid: <a href=\"https:\/\/blue.pri.ee\/ttu\/files\/iax0584\/slaidid-et\/06_silumine.pdf\"><strong>Silumine<\/strong><\/a><\/li>\n<li>Slaidid: <a href=\"https:\/\/blue.pri.ee\/ttu\/files\/iax0584\/slaidid-et\/06_makefile_logimine.pdf\"><strong>Makefile ja logimine<\/strong><\/a><\/li>\n<li>T\u00e4iendav n\u00e4ide: <strong><a style=\"cursor: pointer !important; user-select: none !important;\" href=\"https:\/\/blue.pri.ee\/ttu\/programmeerimine-ii\/koodinaited\/korduvkasutatava-koodi-teegi-loomine\/\">Korduvkasutatava koodi (teegi) loomine<\/a><\/strong><\/li>\n<li>Lisalugemist: <strong><a href=\"https:\/\/blue.pri.ee\/ttu\/coding-guides\/fun-with-valgrind\/\">Fun with valgrind (inglise keeles)<\/a><\/strong><\/li>\n<li>Testfailid valgrindi proovimiseks: <strong><a href=\"https:\/\/blue.pri.ee\/ttu\/files\/iax0584\/demokood\/valgrind.zip\">https:\/\/blue.pri.ee\/ttu\/files\/iax0584\/demokood\/valgrind.zip<\/a><\/strong><\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Praktikumi_ulesanded\"><\/span>Praktikumi \u00fclesanded<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Selles praktikumis on \u00fcks \u00fclesanne, mis on jagatud kaheks osaks. \u00dclesannet laiendab kaks lisa\u00fclesannet.<\/p>\n<p><strong>NB!<\/strong> Kuigi arendada saad oma lahendused \u00fcksk\u00f5ik mis platvormil, siis \u00fcks osa t\u00f5estusest vajab Valgrind t\u00f6\u00f6riista kasutamist. Valgrind t\u00f6\u00f6tab kontrollitult vaid Linuxil (rakendus olemas ka MacOSil) &#8211; vajadusel saad rakenduse t\u00f5estuseks \u00fcles laadida kooliarvutisse.<\/p>\n<p><strong>Lae alla andmefailid: <a href=\"https:\/\/blue.pri.ee\/ttu\/files\/iax0584\/andmefailid\/6_make_data.zip\">https:\/\/blue.pri.ee\/ttu\/files\/iax0584\/andmefailid\/6_make_data.zip<\/a><\/strong><\/p>\n<p>Arhiiv sisaldab andmefaile nii baas\u00fclesandeks kui lisa\u00fclesandeks!<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Ulesande_osa_1_2_W06-1_Andmete_lugemine_tootlemine\"><\/span>\u00dclesande osa 1 \/ 2 [W06-1]: Andmete lugemine, t\u00f6\u00f6tlemine<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Esimeses osas on meie eesm\u00e4rgiks saada programmi andmed sisse ning demonstreerida oma oskusi Makefile&#8217;i koostamiseks ja kasutamiseks ning m\u00e4lus vigade puudumiseks.<\/p>\n<h5><span class=\"ez-toc-section\" id=\"Nouded\"><\/span>N\u00f5uded<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<ul>\n<li>Loe andmed sisendfailist\n<ul>\n<li>Andmefaili struktuur<br \/>\n<span class=\"lang:default highlight:0 decode:true crayon-inline\">&lt;\u00f5ppeaine nimi&gt; &lt;hinnete arv&gt; &lt;hinded&gt;<\/span><\/li>\n<li>Loetud andmed salvesta struktuurimassiivi. Hinnete jaoks v\u00f5id teha m\u00f5istliku pikkusega massiivi &#8211; n\u00e4iteks max 20 hinnet aine kohta (l\u00e4htuvalt n\u00e4itefaili struktuurist).<\/li>\n<\/ul>\n<\/li>\n<li>Kuva ekraanil\n<ul>\n<li>\u00d5ppeaine nimi<\/li>\n<li>\u00d5ppeaines antud hinded<\/li>\n<li>\u00d5ppeaine keskmine hinne<\/li>\n<\/ul>\n<\/li>\n<li>Hoia andmete lugemine, keskmise leidmine ja v\u00e4ljastus eraldi funktsioonides!<\/li>\n<li>Kood peab olema t\u00fckeldatud v\u00e4hemalt kahte koodifaili, millest m\u00f5lemal on oma p\u00e4isefail. T\u00fckeldus peab olema m\u00f5istlik, kuid on j\u00e4etud sinu otsustada.<\/li>\n<li>Kood kompileeri programmiks kasutades Makefile&#8217;i\n<ul>\n<li>Makefile&#8217;is peab olema minimaalselt kirjeldatud retsept <span class=\"lang:default highlight:0 decode:true crayon-inline \">all<\/span>\u00a0, muutuja <span class=\"lang:default highlight:0 decode:true crayon-inline\">CFLAGS<\/span>\u00a0 ja lipud <span class=\"lang:default highlight:0 decode:true crayon-inline \">-Wall -Wextra -Wconversion -g -fanalyzer<\/span><\/li>\n<li>\u00dclej\u00e4\u00e4nud Makefile&#8217;i keerukuse ja \u00fclesehituse v\u00f5id ise otsustada<\/li>\n<\/ul>\n<\/li>\n<li>\u00a0Kaitsmisel\n<ul>\n<li>N\u00e4ita projekti kompileerimist kasutades Makefile&#8217;i<\/li>\n<li>N\u00e4ita programmi v\u00e4ljundit l\u00e4bi Valgrindi t\u00f5estamaks, et puuduvad m\u00e4luvead.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h5><span class=\"ez-toc-section\" id=\"Vihje\"><\/span><strong>Vihje<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Hinnete arv aine kohta varieerub &#8211; st iga failis olev andmerida v\u00f5ib olla erineva pikkusega. Seet\u00f5ttu on andmefaili v\u00f5imalik lugeda \u00fche <span class=\"lang:default highlight:0 decode:true crayon-inline\">fscanf()<\/span>\u00a0 funktsiooni v\u00e4ljakutsega!<\/p>\n<p>Lugemine on vaja teha pesastatud ts\u00fcklitega, kus<\/p>\n<ul>\n<li>V\u00e4limine ts\u00fckkel loeb \u00f5ppeaine nime ning hinnete arvu<\/li>\n<li>Vastavalt v\u00e4limisest ts\u00fcklist saadud hinnete arvule m\u00e4\u00e4ratakse \u00e4ra sisemise ts\u00fckli korduste arv, lugemaks sisse \u00f5ppeaines antud hinded. \u00c4ra unusta sisemise ts\u00fckli <span class=\"lang:default highlight:0 decode:true crayon-inline \">fscanf()<\/span>\u00a0 funktsiooni tagastust kontrollida!<\/li>\n<\/ul>\n<h5><span class=\"ez-toc-section\" id=\"Testimine\"><\/span>Testimine<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>N\u00e4ide v\u00f5imalikust koodi struktuurist.<\/p>\n<p>NB! Failide nimed ei ole ette m\u00e4\u00e4ratud, tegu on lihtsalt n\u00e4idisega. Samuti piisab vaid \u00fchest andmefailist ning see ei pea olema eraldi kaustas.<\/p>\n<pre class=\"toolbar:2 nums:false lang:default highlight:0 decode:true\">.\r\n\u251c\u2500\u2500 data\r\n\u2502   \u251c\u2500\u2500 data_grades.csv\r\n\u2502   \u2514\u2500\u2500 data_grades.txt\r\n\u251c\u2500\u2500 analyzer.c\r\n\u251c\u2500\u2500 analyzer.h\r\n\u251c\u2500\u2500 Makefile\r\n\u251c\u2500\u2500 subjects_processor.c\r\n\u251c\u2500\u2500 subjects_processor.h<\/pre>\n<p><strong>NB!<\/strong> J\u00e4rgnevas n\u00e4ites ei ole kajastatud valgrindi v\u00e4ljundit! \u00c4ra unusta testida oma programmi korrektsust valgrindiga!<\/p>\n<pre class=\"theme:cisco-router toolbar:2 nums:false lang:default highlight:0 decode:true\">Subject: Programming\r\nGrades:  4 5 5 4 2 5 1 4 2 5\r\nAverage: 3.70\r\n\r\nSubject: Databases\r\nGrades:  5 3 3 4 4 3\r\nAverage: 3.67\r\n\r\nSubject: Mechatronics\r\nGrades:  3 3 4 4 5 0\r\nAverage: 3.17\r\n\r\nSubject: Physics\r\nGrades:  5 5 3 3 2 3 4 5 1 1 2 4\r\nAverage: 3.17\r\n\r\nSubject: Ethics\r\nGrades:  5 5 5 4 5 3\r\nAverage: 4.50\r\n\r\nSubject: Scientology\r\nGrades:  N\/A\r\nAverage: N\/A\r\n\r\nSubject: Chemistry\r\nGrades:  4 4 3 4 5 4 5\r\nAverage: 4.14<\/pre>\n<h4><span class=\"ez-toc-section\" id=\"Ulesande_osa_2_2_W06-2_Logimine\"><\/span>\u00dclesande osa 2 \/ 2 [W06-2]: Logimine<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Selle osa raames tuleb sul lisada oma programmi logimine.<\/p>\n<h5><span class=\"ez-toc-section\" id=\"Nouded-2\"><\/span>N\u00f5uded<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<ul>\n<li>Lisa oma programmi logimine\n<ul>\n<li>\u00dcks logi rea kohta. Logi ei tohi olla kaherealine!<\/li>\n<li>Iga logi rida algab ajatempliga. Ajatempel peab sisaldama kuup\u00e4eva (p\u00e4ev, kuu, aasta) ja kellaaega (tunnid, minutid, sekundid)<\/li>\n<\/ul>\n<\/li>\n<li>Programmi j\u00e4rgmine k\u00e4ivitus ei tohi kustutada eelneva k\u00e4ivituse logi<\/li>\n<li>Logitavad s\u00fcndmused\n<ul>\n<li>Programmi k\u00e4ivitamine ja sulgemine<\/li>\n<li>Sisendfaili avamise seisund (edukas \/ eba\u00f5nnestunud)<\/li>\n<li>Faili lugemine l\u00f5petatud. Logis kuva loetud ridade arv!<\/li>\n<li>Faili lugemine katkestatud, kuna massiivi maksimaalne piir on \u00fcletatud (maksimaalne piir kuvatakse logis).\u00a0 NB! Sul on struktuuride massiiv ja struktuuri liikmena hinnete massiiv!<\/li>\n<li>Viga aine keskmise hinde arvutamisel.<\/li>\n<\/ul>\n<\/li>\n<li>Logi terviklikkus peab olema garanteeritud ka programmi kokkujooksu korral\n<ul>\n<li>V\u00f5imalus 1: V\u00e4ljundpuhvrist on v\u00f5imalik sunniga andmed faili kirjutada kasutades funktsiooni <span class=\"lang:default highlight:0 decode:true crayon-inline\">fflush()<\/span><\/li>\n<li>V\u00f5imalus 2: Sulge logifail p\u00e4rast kirjutamist &#8211; faili sulgemise j\u00e4rel kirjutatakse puhvris olevad andmed faili.<\/li>\n<\/ul>\n<\/li>\n<li>Logifaili avamise eba\u00f5nnestumisel peab programm j\u00e4tkama t\u00f6\u00f6d, mitte v\u00e4ljuma! Teavita kasutajat logimise eba\u00f5nnestumisest.<\/li>\n<\/ul>\n<h5><span class=\"ez-toc-section\" id=\"Vihjeid\"><\/span>Vihjeid<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<ul>\n<li>Valmista ette logitav s\u00f5ne enne logimise funktsiooni v\u00e4ljakutsumist! \u00c4ra koorma logimise funktsiooni \u00fcle parameetritega. S\u00f5ne ettevalmistamiseks on hea funktsioon <span class=\"lang:default highlight:0 decode:true crayon-inline\">snprintf()<\/span><\/li>\n<li>Logifunktsiooni lihtsustamiseks on soovitatav mitte failiviita ega nime sellele kaasa anda. V\u00f5imalike lahendusi:\n<ul>\n<li>Ava ja sulge fail logifunktsioonis j\u00e4rjest<\/li>\n<li>See on \u00fcks v\u00f5imalikest eranditest globaalmuutujale &#8211; soovi korral v\u00f5id teha failiviida logifailile globaalmuutujana. (See ei ole hea lahendus, kuid aktsepteeritav &#8211; parem v\u00f5imalus on kirjutatud lahti lisa\u00fclesandena).<\/li>\n<\/ul>\n<\/li>\n<li>N\u00e4iteks v\u00f5iks logimise v\u00e4ljakutsumine v\u00e4lja n\u00e4ha nii:<br \/>\n<span class=\"lang:default decode:true crayon-inline\">Logger(&#8220;Program started&#8221;);<\/span><\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Lisaulesanne_1_W06-3_Logimise_teek\"><\/span>Lisa\u00fclesanne 1 [W06-3]: Logimise teek<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Selle \u00fclesande raames lood sa endale logimise teegi. Vihje: seda saad \u00e4ra kasutada kodut\u00f6\u00f6 2 juures!<\/p>\n<h5><span class=\"ez-toc-section\" id=\"Nouded-3\"><\/span>N\u00f5uded<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<ul>\n<li>Lisa programmile eraldi .c ja .h fail ja t\u00f5sta sinna logimine<\/li>\n<li>Lisa 4 logimise taset &#8211; OFF, ERROR, WARNING ja INFO &#8211; need on loendi t\u00fc\u00fcpi (enum).\n<ul>\n<li>Iga logifaili rea juures on kirjeldatud selle logi tase.<\/li>\n<li>Logi kirjutatakse faili vaid siis, kui m\u00e4\u00e4ratud tase seda lubab. N\u00e4iteks:<br \/>\nINFO taseme korral kirjutatakse k\u00f5igi tasemete logid;<br \/>\nWARNING taseme korral kirjutatakse ainult WARNING ja ERROR tasemega logid;<br \/>\nERROR taseme korral kirjutatakse ainult ERROR tasemega logid;<br \/>\nOFF korral logisid ei kirjutata;<\/li>\n<\/ul>\n<\/li>\n<li>Iga kutse logi kirjutamiseks peab n\u00fc\u00fcd sisaldama selle logi olulisuse taset (ERROR, WARNING v\u00f5i INFO)<br \/>\nN\u00e4iteks: <span class=\"lang:default highlight:0 decode:true crayon-inline\">Logger(LOG_INFO, &#8220;Program started&#8221;);<\/span><\/li>\n<li>Teek peab toetama logi v\u00e4ljundfaili nime andmist<br \/>\nN\u00e4iteks: <span class=\"lang:default highlight:0 decode:true crayon-inline\">LoggerSetOutputName(&#8220;log.txt&#8221;);<\/span><\/li>\n<li>Teek peab toetama programmi logitaseme s\u00e4ttimist<br \/>\nN\u00e4iteks: <span class=\"lang:default highlight:0 decode:true crayon-inline\">LoggerSetLoggingLevel(LOG_INFO);<\/span><\/li>\n<li>Logimise seadistused tuleb hoida logimise teegi sisemiselt. Selleks on logifaili nimi ja logi tase (v\u00f5id ka lisada t\u00e4iendavaid). Need hoiusta logi koodifailis globaalmuutujatena.<\/li>\n<li>Logifaili seadistustel peavad olema vaikev\u00e4\u00e4rtused &#8211; n\u00e4iteks kui kasutaja unustab v\u00f5i ei soovi neid seadistada, siis programm ei l\u00e4heks katki.<\/li>\n<li>Iga logi peab sisaldama kellaaega nii nagu oli kirjeldatud \u00fclesande teises osas.<\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Lisaulesanne_2_W06-4_Lihtsustatud_CSV_failist_lugemine\"><\/span>Lisa\u00fclesanne 2 [W06-4]: Lihtsustatud CSV failist lugemine<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>K\u00e4esoleva lisa\u00fclesande eesm\u00e4rgiks on toetada mitmest s\u00f5nast koosnevaid \u00f5ppeainete nimesid. Selleks on vaja toetada v\u00e4lja sees paikevat t\u00fchikut.<\/p>\n<h5><span class=\"ez-toc-section\" id=\"Nouded-4\"><\/span>N\u00f5uded<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<ul>\n<li>Kasuta sisendfailina CSV versiooni sisendfailist<\/li>\n<li>Andmev\u00e4ljad on \u00fcksteisest eraldatud komaga. Andmev\u00e4ljad ise komasid ei sisalda.<\/li>\n<\/ul>\n<h5><span class=\"ez-toc-section\" id=\"Lahenduskaik\"><\/span>Lahendusk\u00e4ik<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>NB! Kasutame lihtsustatud metoodikat CSV lugemiseks. Sellega\u00a0<strong>ei ole v\u00f5imalik lugeda \u00fcksk\u00f5ik missugust CSV faili!\u00a0<\/strong>St kui andmev\u00e4li v\u00f5ib sisaldada ka komasid, siis seda metoodikat kasutada\u00a0<strong>ei saa!<\/strong><\/p>\n<p>Kui vajad t\u00e4ielikku CSV tuge, kasuta kas vastavat teeki (nt libcsv) v\u00f5i kirjuta n\u00e4iteks olekumasina-p\u00f5hine t\u00f6\u00f6tlemine (loed t\u00e4hem\u00e4rk-haaval ja otsustad mida teha l\u00e4htuvalt loetud t\u00e4hem\u00e4rgist ja hetkeolekust olekumasinas)<\/p>\n<hr \/>\n<p>scanf() funktsioonide perekond v\u00f5imaldab lisaks andmeformaadi kirjeldamisele ka kirjeldada oodatavat sisendit ning lihtsamaid regulaaravaldisi.<\/p>\n<p>N\u00e4iteks lugemaks kasutajalt kellaaega, saame kasutada formaati <span class=\"lang:default decode:true crayon-inline \">scanf(&#8220;%d:%d&#8221;, &amp;hours, &amp;minutes);<\/span>\u00a0 &#8211; sellisel juhul saab kasutaja sisestada kellaaja formaadiga <span class=\"lang:default highlight:0 decode:true crayon-inline \">14:35<\/span> . Muutuja <span class=\"lang:default highlight:0 decode:true crayon-inline\">hours<\/span>\u00a0 saab v\u00e4\u00e4rtuseks <span class=\"lang:default highlight:0 decode:true crayon-inline\">14<\/span> ja <span class=\"lang:default highlight:0 decode:true crayon-inline\">minutes<\/span>\u00a0 v\u00e4\u00e4rtuseks <span class=\"lang:default highlight:0 decode:true crayon-inline\">35<\/span> . Kui aga kasutaja sisestab <span class=\"lang:default highlight:0 decode:true crayon-inline \">14 35<\/span> , siis <span class=\"lang:default highlight:0 decode:true crayon-inline \">hours<\/span>\u00a0 saab ikka v\u00e4\u00e4rtuseks <span class=\"lang:default highlight:0 decode:true crayon-inline \">14<\/span> , kuid kuna t\u00fchik polnud oodatud formaat, siis sealt edasi ei loeta ning <span class=\"lang:default highlight:0 decode:true crayon-inline \">minutes<\/span>\u00a0 j\u00e4\u00e4b v\u00e4\u00e4rtustamata.<\/p>\n<p>L\u00e4htuvalt sellest teadmisest saame koostada faili lugemiseks formaadi <span class=\"lang:default highlight:0 decode:true crayon-inline \">fscanf(fp, &#8220;%[^,],%d&#8221;, &#8230;)\u00a0<\/span> . Asenda failiviida nimi enda kasutatud viidaga ning kolme punkti asemele pane oma muutujad kuhu andmeid salvestad.<\/p>\n<ul>\n<li>Esimene v\u00e4li loetakse tekstina kuniks komani (koma ei loeta). See salvestatakse tekstimassiivi (\u00f5ppeaine nimi)<\/li>\n<li>Seej\u00e4rel loetakse puhvrist v\u00e4lja koma (ja visatakse \u00e4ra)<\/li>\n<li>Siis loetakse sisse \u00fcks t\u00e4isarv (hinnete arv aines)<\/li>\n<\/ul>\n<p>Sedasi saad loetud esimesed 2 v\u00e4lja. Edasi pead juba formaadi koostama hinnete lugemiseks (\u00e4ra komasid unusta!).<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Parast_seda_tundi_peaksid\"><\/span>P\u00e4rast seda tundi peaksid<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>Teadma erinevate ehituss\u00fcsteemide kohta<\/li>\n<li>Oskama koostada lihtsat Makefile&#8217;i\n<ul>\n<li>Teadma, kuidas deklareerida muutujaid ja neid kasutada<\/li>\n<li>Teadma, kuidas koostada retsepti, sh mitut retsepti \u00fches failis<\/li>\n<li>Teadma, mis retsepti sees k\u00e4ib<\/li>\n<li>Teadma varjatud reeglitest ja oskama neid vajadusel kasutada<\/li>\n<\/ul>\n<\/li>\n<li>Oskama kasutada Makefile&#8217;i programmi kompileerimiseks<\/li>\n<li>Oskama kasutada valgrindi programmist vigade leidmiseks ja korrektsuse kontrollimiseks<\/li>\n<li>Oskama programmi siseselt hetke kellaaega leida ning seda kujundada<\/li>\n<li>Teadma logimise p\u00f5hit\u00f5desid ja olulisust<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Taiendav_materjal\"><\/span>T\u00e4iendav materjal<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>Make manual<br \/>\n<strong><a href=\"https:\/\/www.gnu.org\/software\/make\/manual\/make.html\">https:\/\/www.gnu.org\/software\/make\/manual\/make.html<\/a><\/strong><\/li>\n<li>What is a Makefile and how does it work?<br \/>\n<strong><a href=\"https:\/\/opensource.com\/article\/18\/8\/what-how-makefile\">https:\/\/opensource.com\/article\/18\/8\/what-how-makefile<\/a><\/strong><\/li>\n<li>Compiling Programs with Make<br \/>\n<strong><a href=\"https:\/\/web.stanford.edu\/class\/archive\/cs\/cs107\/cs107.1194\/resources\/make\">https:\/\/web.stanford.edu\/class\/archive\/cs\/cs107\/cs107.1194\/resources\/make<\/a><\/strong><\/li>\n<li>Makefile tutor project (n\u00e4idisprojektid koos Makefile&#8217;iga)<br \/>\n<strong><a href=\"https:\/\/github.com\/clemedon\/Makefile_tutor\">https:\/\/github.com\/clemedon\/Makefile_tutor<\/a><\/strong><\/li>\n<li>Makefile tutorial<br \/>\n<strong><a href=\"https:\/\/makefiletutorial.com\">https:\/\/makefiletutorial.com<\/a><\/strong><\/li>\n<li>VMWare VSphere Logging options (levels)<br \/>\n<strong><a href=\"https:\/\/docs.vmware.com\/en\/VMware-vSphere\/8.0\/vsphere-vcenter-configuration\/GUID-0439D577-66F7-4584-AF05-5EB41A761873.html\">https:\/\/docs.vmware.com\/en\/VMware-vSphere\/8.0\/vsphere-vcenter-configuration\/GUID-0439D577-66F7-4584-AF05-5EB41A761873.html<\/a><\/strong><\/li>\n<li>Logimise teegi n\u00e4idis (keerukam kui meil vaja)<br \/>\n<strong><a href=\"https:\/\/github.com\/rxi\/log.c\">https:\/\/github.com\/rxi\/log.c<\/a><\/strong><\/li>\n<li>strftime() funktsioon<br \/>\n<strong><a href=\"https:\/\/www.cplusplus.com\/reference\/ctime\/strftime\/\">https:\/\/www.cplusplus.com\/reference\/ctime\/strftime\/<\/a><\/strong><\/li>\n<li>Valgrind dokumentatsioon<br \/>\n<strong><a href=\"https:\/\/valgrind.org\/docs\/manual\/index.html\">https:\/\/valgrind.org\/docs\/manual\/index.html<\/a><\/strong><\/li>\n<li>Teegi tegemise juhend<br \/>\n<strong><a href=\"http:\/\/www.yolinux.com\/TUTORIALS\/LibraryArchives-StaticAndDynamic.html\">http:\/\/www.yolinux.com\/TUTORIALS\/LibraryArchives-StaticAndDynamic.html<\/a><br \/>\n<\/strong><\/li>\n<li>Address Sanitizer dokumentatsioon<br \/>\n<strong><a href=\"https:\/\/github.com\/google\/sanitizers\/wiki\/AddressSanitizer\">https:\/\/github.com\/google\/sanitizers\/wiki\/AddressSanitizer<\/a><\/strong><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Praktikumi materjal Slaidid: Silumine Slaidid: Makefile ja logimine T\u00e4iendav n\u00e4ide: Korduvkasutatava koodi (teegi) loomine Lisalugemist: Fun with valgrind (inglise keeles) Testfailid valgrindi proovimiseks: https:\/\/blue.pri.ee\/ttu\/files\/iax0584\/demokood\/valgrind.zip Praktikumi \u00fclesanded Selles praktikumis on \u00fcks \u00fclesanne, mis on jagatud kaheks osaks. \u00dclesannet laiendab kaks lisa\u00fclesannet. NB! Kuigi arendada saad oma lahendused \u00fcksk\u00f5ik mis platvormil, siis \u00fcks osa t\u00f5estusest vajab Valgrind &hellip; <a href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/pr2et6-makefile-ja-logimine\/\" class=\"more-link\">Loe edasi <span class=\"screen-reader-text\">PR2ET6: Makefile ja logimine<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[97,94],"tags":[],"class_list":["post-8265","post","type-post","status-publish","format-standard","hentry","category-laborid","category-pr1-et"],"_links":{"self":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/posts\/8265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/comments?post=8265"}],"version-history":[{"count":13,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/posts\/8265\/revisions"}],"predecessor-version":[{"id":11300,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/posts\/8265\/revisions\/11300"}],"wp:attachment":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/media?parent=8265"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/categories?post=8265"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/tags?post=8265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}