Warning
This page is located in archive. Go to the latest version of this course pages.

1 - Úvodní cvičení

Seznámení s počítačovou učebnou, ownCloud a BRUTE.

  • pro vyučující: 01

Cíle cvičení

  1. Přihlášení do operačního prostřední a nastavení vývojového prostředí.
  2. Vytvoření jednoduchého skriptu (posloupnosti příkazů) pro práci se soubory.
  3. Formátování zdrojového programu.
  4. Kompilace programu a spouštění programu.
V PRP nepředepisujeme jaké pracovní vývojové prostředí používat. Obecně doporučujeme začínajícím programátorům použít prostředí VS Code, případně nakonfigurovaný editor gedit nebo vim. Určitě je také možné použít komplexní prostředí jako je např. CLion. Nicméně jeho konfigurace a prozkoumání všech možností, může velmi rychle překročit časovou dotaci předmětu.

Práce v příkazové řádce

Příkazová řádka je uživatelské rozhranní, ve kterém uživatel komunikuje s počítačem podobně jako při psaní programu, tj. píše příkazy, které počítač vykonává tak, jako když programátor píše program (recept), který následně spustí. V případě přímého ovládání počítače a interakce s operačním systémem je využito interaktivního režimu, ve kterém počítač reaguje na každý příkaz, který je v příkazové řádce napsán a odeslán počítači ke zpracování klávesou “Enter”. Data jsou v počítači uložena ve formě souborů, k nímž je přístup uživatelů zprostředkován operačním systémem. Proto základní práce s počítačem spočívá v interakci s operačním systémem a práci se soubory.

Výhodou ovládání počítače sekvencí příkazu je opakovatelnost, neboť se vlastně jedná o textový zápis operací podobně jako při psaní programu. Vlastně tak programujeme i pře běžném používání, zlvášťě pokud přidáme i podmíněné vykonávání příkazu a cykly. Takový zápis lze uložit do souboru a posleze replikovat, nebo vytvořit skript, který lze následně opakovaně spouštět a tím vlastně vytvořit nový příkaz.

Příkazová řádka je přítomna ve všech operačních systémech. Ve Windows je příkazová řádka přístupna pomocí programu cmd.exe nebo modernější varianty PowerShell.exe, případně alternativou Z-shell. Na systémech unixového typu běží příkazová řádka jako tzv. shell dostupný buď přímo v textovém režimu, nebo přes emulátory z grafického rozhranní (na Linuxu Xterm, Gnome terminal, Konsole …, na OS X terminal). Příkazová řádka umožňuje základní ovládání operačního systému (procházení adresářové struktury, práce se soubory, vyhledávání …), poskytuje rozhranní uživatelským programům a hlavně umožňuje řetězit vstupy a výstupy jednotlivých programů.

Velkou výhodou vývojového prostředí VS Code je integrace příkazové řádky do okna prostředí spolu s editačním oknem případně náhledem na existující soubory a to i v prostředí založené na aplikace v jediném grafickém okně.

Typická struktura příkazu

prikaz [přepínače] [parametry|argumenty|jména souboru(ů)]

Příkazy navigace v adresářové struktuře

Příkaz Používané přepínače Význam
ls -l -t vypíše obsah aktuálního pracovního adresáře (list directory contents)
cd změní aktuální pracovní adresář (change directory)
pwd vypíše absolutní adresu aktuálního pracovního adresáře (print working directory name)
tree vypíše strukturu aktuálního pracovního adresáře včetně podadresářů formou stromu

Příkazy práce se soubory a adresáři

Příkaz Používané přepínače Význam
mkdir Vytvoří adresář zadaného jména (make directories )
cp -r Zkopíruje soubor zadaného jména (copy files)
mv Přesune (přejmenuje) soubor zadaného jména (move files)
rm -r -f Odstraní soubor zadaného jména (remove directory entries)
​touch Vytvoří soubor zadaného jména, pokud takový existuje, jinak aktualizuje tzv. ​modification time​. ​
Drtivá většina příkazů má typicky vestavěnou manuálovou stránku, např. man touch, případně návod touch —-help.

Ostatní důležité příkazy

Příkaz Používané přepínače Význam
man Vypíše manuálovou stránku zadaného příkazu.
find Vyhledá soubor zadaného jména v aktuálním adresáři.
locate Jako find, ale hledá v kompletní adresářové struktuře vytvořené databáze.
cat Vypíše obsah souboru jako text
echo Vypíše obsah argument na standardní výstup, např. návratovou hodnota posledního příkazu echo $? nebo proměnná prostředí echo $HOME nebo echo $PWD.
hexdump -C Vypíše obsah souboru v hexadecimálním tvaru doplněný o adresy paměti.

Úkoly

  • Nastavte si heslo v počítačové učebně (Nastavení hesla) a seznamte se používaným prostředím
Adresář (anglicky directory) je objektem souborového systému s přesně definovaným umistěním v rámci hiearchie souborů. Složka (folder) je motivována grafickým rozhraním reprezentující nějaký konkrétní adresář. https://en.wikipedia.org/wiki/Directory_(computing)#Folder_metaphor. Například domovský adresáře uživatele user najdeme typicky v adresáři /home/user. Složku Dokumenty můžeme například najít na grafického rozhraní a podle volby jazyka prostředí může odkazovat na /home/user/Documents nebo jinou složkou, třeba i vzdálený adresář.
  • V příkazové řádce vytvořte adresář prp a v něm lab01. Ideálně přímo v domovském adresáři, alternativně například ve složce Documents.
    • Ve vytvořeném adresáři prp vytvořte adresář lab01.
    • V adresáři lab01 vytvořte textový soubor se jménem prp-lab01.txt
    • Celý adresář 'lab01' přesuňte do adresáře 'prp-lab01' v adresáři ~/ctu-fee, kde symbol ~ reprezentuje domovský adresář, tež odkazovaný v proměnné prostředí HOME, odkazované např. printenv $HOME.
    • Soubor prp-lab01.txt přejmenujte na main.c.
Příklad sezení v příkazovém interpretu může být
➜  ~ pwd
/home/jf
➜  mkdir -p prp/lab01
➜  touch prp/lab01/prp-lab01.txt
➜  tree prp
prp
└── lab01
    └── prp-lab01.txt

1 directory, 1 file
➜  mkdir ctu-fee
➜  mv prp/lab01 $HOME/ctu-fee/prp-lab01
➜  cd ctu-fee/prp-lab01                          
➜  pwd
/home/jf/ctu-fee/prp-lab01
➜  ls
prp-lab01.txt
➜  mv prp-lab01.txt main.c
➜  cd
➜  tree ctu-fee 
ctu-fee
└── prp-lab01
    └── main.c

1 directory, 1 file
Jednotlivé kroky můžete kontrolovat například pohledem grafického správce souborů.
  • Vytvořte skript prp-lab01.sh, který provede uvedené kroky v posloupnosti, ale místo domovského adresáře umístě podadresáře a soubory do pracovního prostoru /tmp, například odkazovaného /tmp/$PWD.
    • Soubor označte jako spustitelný např. chmod +x prp-lab01.sh pro přímé spuštění ve stylu ./prp-lab01.sh nebo jej můžete spustit v rámci konkrétní instance příkazového interpretu např. . ./prp-lab01.sh.
Pokud ve skriptu použijete příkaze cd pro změnu aktuálního pracovního adresáře, můžete se k předchozím adresáři vrátit cd -, viz například https://www.youtube.com/watch?v=zvKRKU-ex6g.
  • Ve skriptu můžete pro zjednodušení využít proměnnou např. dst=/tmp/$HOME použitelnou třeba v mkdir -p $dsts/prp/lab01.
Výstup může například vypadat následovně.
. ./prp-lab01.sh
/tmp/home/jf/prp
└── lab01
    └── prp-lab01.txt

1 directory, 1 file
/tmp/home/jf/ctu-fee
└── prp-lab01
    └── main.c

1 directory, 1 file

Formátování zdrojového programu

wget https://cw.fel.cvut.cz/wiki/_media/courses/b0b36prp/labs/setup_gedit.zip

  • Rozbalte ho a nainstalujte (=spusťte)

unzip setup_gedit.zip
./setup_gedit.sh

Klíčové nastavení editoru je pro formátování zdrojového kódu. V předmětu PRP je preferováno formátování nástrojem clang-format a nastavením stylu:

 {BasedOnStyle: llvm, IndentWidth: 4, BreakBeforeBraces: Linux}

Formátování zdrojového kódu pak provedete např. následovně:

clang-format -style='{BasedOnStyle: llvm, IndentWidth: 4, BreakBeforeBraces: Linux}' muj_kod.c > formatovany_kod.c

V případě použití vývojového prostředí VS Code lze lokálně nastavit formátování vytvořením souboru .clang-format, viz Programovací prostředí. Výstup pak může například vypadat následovně.

Úvod do programování v jazyce C

// example program in C
#include <stdio.h>
 
int main()
{
    printf("Hello PRP!\n");
    return 0;
}

Překlad programu

Překlad na spustitelný soubor provádíme z příkazové řádky příkazem

clang -Wall -pedantic -std=c99 main.c -o main
případně
gcc -Wall -pedantic -std=c99 main.c -o main

Spuštění programu

Program spouštíme z příkazové řádky příkazem

./main

VS Code

V prostředí VS Code může vypadat interaktivní práce tak, že si stáhneme soubor domácího úkolu v prohlížeči do adresáře ~/Downloads a dále vše řešíme už jen z VS Code s využitím integrovaného terminálu.

kde můžeme též využít příložena Makefile a vytvořit si zip soubour voláním make zip.

Úkoly

  • Do souboru main.c napište zdrojový kód programu, který vypíše na standardní výstup “Hello PRP!”.
  • Program zkompilujte a spusťte.
  • Zdrojový kód zazipujte do archivu main.zip, například pomocí příkazu: zip main.zip main.c.
  • Vytvořený archiv nahrajte do Upload systému, viz úkol HW00.
  • Dále je možné využít proměnnou prostředí $? a vyzkoušet si různé návratové hodnoty programu a řetězení kompilace a spuštění programu, včetně např. podmíněného spuštění programu v závislosti na úspěchu kompilace programu.

courses/b0b36prp/labs/lab01.txt · Last modified: 2023/02/13 17:25 by faiglj