Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Jednoduchá C ++ implementácie programu tail

Tento program som vytvoril v rámci štúdia - zadanie bolo napísať zjednodušený tail, ktorý bežne nájdeme v UNIXových systémoch. Mal som vytvoriť implementáciu v C aj v C ++ (vraj aby sme si to trochu vyskúšali), ale zverejním iba C ++ verziu, ktorá zvláda neobmedzene dlhé riadky (implementácia tohto v C je nepomerne pracnejšie). Spracovanie argumentov je rovnaké pre obe verzie (jednoduchá C "knižnica").

Čo je to tail?

Najskôr si povieme trochu teórie. Ak nepoužívate Linux alebo iný UNIXový systém, dosť možno ste o programe tail nikdy nepočuli. V zásade je to jednoduchý filter (viď. Môj článok o filtroch), ktorý vypisuje na štandardný výstup (stdout) posledných n riadok prečítaných zo štandardného vstupu (stdin) alebo súboru. GNU implementácia vie rôzne kúzla (viď. Manuálové stránky), čo som ja našťastie robiť nemusel. Moja implementácia vie len vypisovať posledných n riadkov a všetky riadky od riadku n.

Implementácia

Vypisovať všetky riadky od riadku n je naozaj triviálne - stačí mať jeden string ako buffer a počítať prečítané riadky. Akonáhle narazíme na riadok n, je splnená podmienka a jednoducho s každou iterácií vypíšeme obsah nášho buffera na stdout.

Implementácia výpisu posledných n riadkov je trochu problémovejšie. Keďže ide o filter, program musí vedieť spracovávať stream - nevieme teda dopredu, koľko riadkov bude. Musíme mať teda ukladacích vždy posledných n riadkov a akonáhle narazíme na koniec (súbore alebo streamu), obsah tohto buffera vypíšeme (v rovnakom poradí, ako sme ho prečítali samozrejme). Ja to vyriešil pomocou queue <string> - fronty stringov.

Fronta

Ak by ste niekto náhodou nevedel, tak fronta je pamäť, do ktorej môžeme zapisovať iba na koniec a čítať iba zo začiatku. Dobre vystihujúce je anglická skratka FIFO - First In, First Out. Popisuje správanie fronty (ktoré naozaj funguje rovnako, ako fronta v obchode) - kto prvý príde, prvý odíde.

Záver

Pomoc na použitie je priamo v programe a dostanete sa k nej pomocou prepínača -h, respektíve --help. Pre preklad je priložený Makefile.

$ ./tail --help

Na záver by som ešte podotkol, že o C ++ nemám zatiaľ prakticky žiadne teoretické vedomosti, takže som najskôr niektoré veci riešil zbytočne zložito (pomocou knižnice C) a išlo by to lepšie. Za akékoľvek pripomienky, korekcia a návrhy budem samozrejme rád. :)


Galéria


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 59x (2.83 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C

 

Všetky články v sekcii
Zdrojákoviště jazyka C - Programovanie v Linuxe
Program pre vás napísal David Novák
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se zajímá především o nízkoúrovňové programování (C/C++, ASM) a návrh hardwaru (VHDL).
Aktivity