Commit 0615fbd4 authored by Michal Vrabel's avatar Michal Vrabel
Browse files

Pridany README.md, zjednoduseny priklad pouzitia umask_options

parent dff40d4e
# Operačné systémy 2018 - Copymaster
Tento projekt obsahuje základnú štruktúru zadania Copymaster.
Zdrojové súbory z tohoto projektu môžete použiť vo svojich zadaniach.
Aktuálne sa projekt skladá z dvoch modulov:
- **copymaster** (`copymaster.c`) - Hlavný modul, ktorý obsahuje funkciu `main()`
- **options** (`options.c`, `options.h`) - Spracovanie parametrov príkazového riadku (prepínačov)
## Spracovanie parametrov
Funkcia `ParseCopymaterOptions()` je zodpovedná za spracovanie parameterov príkazového riadku.
Typ návratovej hodnoty tejto funkcie je `struct CopymasterOptions`.
Táto štruktúra obsahuje členské premenné, ktoré reprezentujú jednotlivé prepínače programu v predspracovanej podobe.
Spôsob práce s týmito členskými premennými je demonštrovaný vo funkcii `main()` v súbore `copymaster.c`.
Pre kontrolu, či v parametroch príkazového riadku je nastavený prepínač, použite členskú premennú, ktorá má názov identický s názvom prepínača v zadaní úlohy.
Výnimkou je prepínač `--delete` (v krátkej forme `-d`), ktorý je asociovaný s členskou premennou `delete_opt`.
Prepínače, ktoré majú nejakú aj vstupnú hodnotu (`--create`, `--lseek`, `--chmod`, `--umask`, `--truncate`) majú v štruktúre `CopymasterOptions` asociovaný dodatočnú členskú premennú.
Použitie týchto premenných by malo byť ľahko pochopiteľné.
Mále nejasnoti môžu byť pri členskej premennej `umask_options`.
Premenná je dvojrozmerné pole 10x4 znakov.
Toto pole je možné porozumieť ako zoznam nastavení z príkazového riadku.
Každá položka prvej dimenzie poľa je platný reťazec v jazyku C, teda štvrtý bajt reťazca je `\0`.
Očakáva sa, že prepínač `--umask` môže mať maximálne 9 rôznych nastavení (3 typy používateľov - `u`,`g`,`o`, 3 typy práv - `r`, `w`, `x`).
Ak je prvý bajt nastavenia `0`, znamená to koniec zoznamu nastavení a už nie je ďalej potrebné prechádzať položkami poľa `umask_options`.
......@@ -44,12 +44,11 @@ int main(int argc, char* argv[])
printf("umask:\t%d\n", cpm_options.umask);
for(unsigned int i=0; i<kUMASK_OPTIONS_MAX_SZ; ++i) {
if (cpm_options.umask_options[i][0] != 0) {
printf("umask_options[%u]: %s\n", i, cpm_options.umask_options[i]);
}
else {
if (cpm_options.umask_options[i][0] == 0) {
// dosli sme na koniec zoznamu nastaveni umask
break;
}
printf("umask_options[%u]: %s\n", i, cpm_options.umask_options[i]);
}
printf("link: %d\n", cpm_options.link);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment